我们的rails 3.1.3 app中有user和user_level。用户具有许多user_levels,user_level属于用户。
当user_level对象在'new'中创建时,user_level记录已成功保存,如下所示:
def new
@user = User.new
@user.user_levels.build
end
但是,使用以下代码添加的user_level记录(通过railscasts.com#197)未与@user一起保存:
def link_to_add_fields(name, f, association)
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.simple_fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render :partial => association.to_s, :locals => {:f => builder, :i_id => 0}
end
link_to_function(name, "add_fields(this, \"#{association}\", \"#{j fields}\")")
end
fields_for和simple_fields_for都没有运气。插入字段的html代码由f.simple_fields_for(association, new_object, :child_index => "new_#{association}")
生成。但不知何故,添加的字段没有与@ user.save一起保存。
在成功的情况下,用@user.user_levels.build
在'new'中创建了用户级对象。在不成功的情况下,该对象是在“link_to_add_fields”中使用f.object.class.reflect_on_association(association).klass.new
创建的。我们试图在'link_to_add_fields'中使用obj.user_levels.build而没有运气。
有关这个问题的任何想法?非常感谢。
更新:
这是在选择了2个位置时发布到服务器的BAD字符串:
{“name”=>“pur eng”,“login”=>“tester10”,“password”=>“password”,“password_confirmation”=>“password”,“user_type”=> ;“employee”,“user_levels_attributes”=> {“1329335776431”=> {“user_levels”=> {“position”=>“mech_eng”},“_ destroy”=>“false”},“1329335779261 “=> {”user_levels“=> {”position“=>”elec_eng“},”_ destroy“=>”false“}}}
这是发布到服务器的GOOD字符串,并成功保存了用户级别。
{“name”=&gt;“tester eng”,“login”=&gt;“tester11”,“password”=&gt;“password”,“password_confirmation”=&gt;“password”,“user_type”=&gt; ;“employee”,“user_levels_attributes”=&gt; {“0”=&gt; {“position”=&gt;“elec_eng”},“1”=&gt; {“position”=&gt;“inst_eng”}}} < / p>
额外的“user_levels”=&gt;在BAD字符串中导致问题?如果是,如何删除它?
答案 0 :(得分:1)
正如Ryan在节目结尾处所描述的那样:
更新:下面的代码已稍微更改以使用Rails 3.x(删除h转义调用)
def link_to_add_fields(name, f, association)
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render(association.to_s.singularize + "_fields", :f => builder)
end
link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
end