fields_for无法渲染 - Rails 3

26

终于开始一个新的项目,使用Rails 3。但是已经遇到了一个初学者的问题。

试图做一个简单的嵌套表单。

有两个模型:list和tasks

List模型

class List < ActiveRecord::Base
  has_many :tasks, :dependent=>:destroy
  accepts_nested_attributes_for :tasks, :reject_if => lambda { |a| a[:name].blank? }
end

任务模型

class Task < ActiveRecord::Base
  belongs_to :list

end

列表控制器

def new
   @list = List.new
   3.times{ @list.tasks.build }
end

lists/new.html.erb

<% form_for :list, :url=>{:action=>"create"} do |f| %>
    <%= f.text_field :name, :class=>'big' %>
    <%= f.label :name, "ex: Today's Todos, Christmas List" %>

    <% f.fields_for :tasks do |builder| %>
        <p>
            <%= builder.label :name, "Task" %>
            <%= builder.text_field :name %>
            <%= builder.check_box :_destroy %>
        </p>
    <% end %>

    <p><%= submit_tag "Create List", :id => "submit", :name => "submit", :class => "form_submit", :disabled => false, :disable_with => "Please wait..." %></p>

<% end -%>

使用debug @list,我可以在我的控制器中看到我创建的3个任务,但是fields_for不会被渲染。

有任何想法吗?

2个回答

81
在 Rails 3 中,你应该在 form_forfields_for 中使用 <%= 而非 <%。看看是否有帮助。

问题已经解决了...现在只有3个任务文本字段中的1个正在显示...有什么想法吗? - Ryan
明白了。我没有在form_for中使用我创建的实例变量。 - Ryan
2
很棒,很高兴你解决了这些问题。将来你可能想要查看 https://github.com/plataformatec/simple_form 或 https://github.com/justinfrench/formtastic,以使Rails表单更易处理。 - bowsersenior
1
我爱你!三天的研究,没有找到解决方案。除了这个! - marzapower
这让我免去了从我已经秃顶的头上拔掉几根头发的烦恼! - DGM
显示剩余4条评论

0
在你的列表控制器的new动作中,你需要添加以下内容
 def new
   @list = List.new
   3.times{ 
   @tasks = @list.tasks.build
   }
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接