2

我一直在关注 Ryan Bates 关于嵌套表单Railscast 196的教程

新操作的表单显示测验的嵌套属性,但不显示键的嵌套属性。我猜这是因为测验有一个 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 %>
4

2 回答 2

1

您应该尝试修改您的 fields_for 块以使用 <%= %>

尝试更改为:

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

railscast 可以在 Rails 3 更改为使用 <%= %> 而不是 <%%> 之前进行。

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

https://github.com/ryanb/nested_form

于 2012-04-10T23:35:03.410 回答
0

尝试将关键对象构建为

@reposit.build_key

来自 Rails 文档 http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Unsaved+objects+and+associations

如果您希望将对象分配给 has_one 关联而不保存它,请使用 build_association 方法。被替换的对象仍将被保存以更新其外键。

于 2012-04-10T23:50:48.633 回答