按照我目前设置代码的方式,用户has_many current_treatments(与其他处理不同,因为它们与用户之间的关联将布尔“当前”设置为true)。我遇到的问题是,当我尝试通过accepts_nested_attributes_for以嵌套形式指定用户的当前处理时,“待处理”不会使用“当前”布尔值集保存。
我假设accepted_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)
请注意,保存新处理时不会将“current”布尔值设置为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
答案 0 :(得分:1)
我自己发现了明显的问题:
# 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/>
通过id“user [current_treatment_ids] []”使用select_tag永远不会调用accepts_nested_attributes生成的方法。 id必须是“user [current_treatment_attributes] []”的范围。
但是我认为这引发了一个问题:我是否真的想要accept_nested_attributes_for:current_treatment,或者更确切地说,在:user和:current_treatment之间的关联,也就是所谓的:current_treating。据我所知,Accepts_nested_attributes_for旨在创建新对象。我不打算在这里创造新的治疗方法,只是新的治疗方法(也就是两者之间的关联)。
无论如何,稍微和自己说话,但我打算将此标记为已解决,因为我希望这个问题的方向不再像我希望的那样尖锐。