При способе, которым я сейчас настроил свой код, пользователь has_many current_treatments (который отличается от других обработок тем, что ассоциация между ним и пользователем имеет логическое значение «current», установленное в true). Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь указать текущие обработки пользователя во вложенной форме через accepts_nested_attributes_for, «лечения» не сохраняются с «текущим» логическим набором.
Я предполагал, что acceptpts_nested_attributes_for выполняет эту работу за вас. Не так ли? Если да, что я делаю не так? Если этого не произойдет, каков наилучший способ достижения этого?
Вот мой пример:
# user.rb
has_many :treatings
has_many :treatments, :through => :treatings
has_many :current_treatments, :through => :treatings, :conditions => {'treatings.current' => true}, :source => :treatment
accepts_nested_attributes_for :current_treatments
И я пытаюсь разрешить пользователю устанавливать свои текущие процедуры с помощью:
# user/edit.html.erb
<%= select_tag "user[current_treatment_ids][]", options_from_collection_for_select(Treatment.all, "id", "name", @user.current_treatment_ids), :multiple=>true %><br/>
Но при отправке формы я получаю что-то вроде:
# development.log
SQL (0.4ms) INSERT INTO "treatings" ("created_at", "current", "treatment_id", "updated_at", "user_id") VALUES ('2011-01-15 18:49:02.141915', NULL, 4, '2011-01-15 18:49:02.141915', 1)
Обратите внимание, что новая обработка сохраняется без "текущего" логического значения со значением true, как указано в объявлении has_many.
РЕДАКТИРОВАТЬ : Вот модель Treatment
.
class Treatment < ActiveRecord::Base
has_many :treatings
has_many :users, :through => :treatings
has_many :current_users, :through => :treatings, :conditions => {:current => true}, :source => :user
has_many :past_users, :through => :treatings, :conditions => {:current => false}, :source => :user
end