在Rails中为多个嵌套资源创建表单3

时间:2012-04-10 22:26:39

标签: ruby-on-rails ruby-on-rails-3

我一直在关注嵌套表格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 %>

2 个答案:

答案 0 :(得分:1)

您应该尝试修改您要使用的fields_for块&lt;%=%&gt;

尝试更改为:

<%= f.fields_for :key do |key_fields| %>

在Rails 3更改之前可以使用railscast来使用&lt;%=%&gt;而不是&lt; %%&gt;。

Ryan有一个nested_form gem,你可能会发现它也很有用。我还没有尝试使用它,但计划下次我开始一个新项目。

https://github.com/ryanb/nested_form

答案 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方法。被替换的对象仍将被保存以更新其外键。