保存数据时使用nested_form gem的问题

时间:2011-07-22 22:01:21

标签: ruby-on-rails-3 gem nested-forms

这是我第一次来这里,第一次使用nested_form gem。一切似乎都没问题,但我的“父”模型的数据并没有保存。

这是我的代码

    <%= nested_form_for @project do |f| %>
      <p>
        <%= f.label :name %><br />
        <%= f.text_field :name %>
      </p> 

      <%= f.fields_for :tasks %>
      <p><%= f.link_to_add "Add a task", :tasks %></p>

      <%= f.submit %>
    <% end %>

所以,当我“提交”时,只保存任务,但不保存项目名称。

对我有任何线索?我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您需要添加属性。例如,名称为attr_accessible。

# app/models/project.rb
class Project < ActiveRecord::Base
  has_many :tasks, :dependent => :destroy
  accepts_nested_attributes_for :tasks, :allow_destroy => true
  attr_accessible :name,:tasks_attributes ## <-- you need this line
end

答案 1 :(得分:0)

您的fields_for声明不太正确

<%= f.fields_for :tasks %>

应该是

<%= f.fields_for :tasks do |task_builder| %>

您也缺少该声明的结尾和渲染部分,该部分具有关联对象的嵌套字段。

所以你最终会得到像这样的东西

<%= f.fields_for :tasks do |task_builder| %>
  <%= render 'task_fields', :f => task_builder %>
<% end %>
<p><%= f.link_to_add "Add a task", :tasks %></p>

这应该可以解决问题。您现在需要做的就是创建一个_task_field.html.erb partial并使用f.label,f.text_field等以常规方式将任务字段添加到它...

P.S。

您的代码可能无法运行。您可能会遇到错误,因此您的开场白可能会遗漏某些内容。