我一直在关注嵌套表格Railscast 196
的Ryan Bates教程新操作的表单显示测验的嵌套属性,但不显示键的嵌套属性。我猜这是因为测验有一个has_many关系,其中key具有has_one关系......但我无法弄清楚我做错了什么?
非常感谢任何帮助!
这是我的模特:
class Repository < ActiveRecord::Base
has_many :quizzes, :dependent => :destroy
has_one :key, :dependent => :destroy
accepts_nested_attributes_for :key, :quizzes
end
这是我的控制者:
def new
@repository = Repository.new
3.times { @repository.quizzes.build }
@repository.key = Key.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @repository }
end
end
这是我的观点:
<div class="field">
<%= f.label :wp_uid %><br />
<%= f.text_field :wp_uid %>
<% f.fields_for :quizzes do |quiz_fields| %>
<p>
<%= quiz_fields.label :name, "Name" %><br />
<%= quiz_fields.text_field :name %>
</p>
<% end %>
<% f.fields_for :key do |key_fields| %>
<div class="field">
<%= key_fields.label :value, "Value" %><br />
<%= key_fields.text_field :value %>
</div>
<div class="field">
<%= key_fields.label :expiry, "Expiry" %><br />
<%= key_fields.date_select :expiry %>
</div>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:1)
您应该尝试修改您要使用的fields_for块&lt;%=%&gt;
尝试更改为:
<%= f.fields_for :key do |key_fields| %>
在Rails 3更改之前可以使用railscast来使用&lt;%=%&gt;而不是&lt; %%&gt;。
Ryan有一个nested_form gem,你可能会发现它也很有用。我还没有尝试使用它,但计划下次我开始一个新项目。
答案 1 :(得分:0)
尝试将关键对象构建为
@ reposity.build_key
来自rails docmentation http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Unsaved+objects+and+associations
如果您希望将对象分配给has_one关联而不保存它,请使用build_association方法。被替换的对象仍将被保存以更新其外键。