Ruby on Rails - 麻烦循环使用部分使用集合

时间:2008-11-19 05:55:12

标签: ruby-on-rails collections partials

我在使用rails创建的表单中的部分使用:collection命令时遇到问题。我理想情况下喜欢使用:collection命令,因此我可以在我的.rjs模板中轻松操作此部分(当复选框更改时,表单将提交并重新加载表单,这是一个待办事项列表。)

此代码有效:

<% form_for "list[]", :url => {:action => "checkbox_update"} do |f| %>
      <ul id="lists_not_completed">
           <% for @list in @lists %>
               <%= render :partial => @list,  :locals => {:f =>f, :complete => FALSE } %>   
          <% end %>
      </ul>
<% end %>   

with partial:

<% if @list.completed == complete %>
        <li><%= f.check_box :completed %>
                <%=h @list.name %>

        <%= link_to 'Show', list %>
        <%= link_to 'Edit', edit_list_path(list) %>
    <%= link_to 'Destroy', list, :confirm => 'Are you sure?', :method => :delete %></li>
<% end %>

此代码不起作用,但我希望它使用此表单:

<% form_for "list[]", :url => {:action => "checkbox_update"} do |f| %>
  <ul id="lists_not_completed">
      <%= render :partial => 'list', :collection => @lists, :locals => {:f =>f, :complete => FALSE } %> 
  </ul>
<% end %>

非工作部分:

<% if list.completed == complete %>
        <li><%= f.check_box :completed %>
                <%=h list.name %>

        <%= link_to 'Show', list %>
        <%= link_to 'Edit', edit_list_path(list) %>
    <%= link_to 'Destroy', list, :confirm => 'Are you sure?', :method => :delete %></li>
<% end %>

我收到错误:

object []命名但是对象参数和@object var不存在或者不响应to_param:nil。它指的是这一行:<li><%= f.check_box :completed %>。我不确定为什么这不起作用并尝试了很多不同的变化,但我不能让它工作。表格是否阻止我这样做? form_for代码直接来自Rails Way书籍,用于列出表单中一个模型的多个对象。

对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

我认为问题是当你使用render时,你没有在任何地方定义@list:part with a:collection。

当您调用f.check_box

时,系统正在寻找@list以匹配列表[]

你可以在你的部分中设置@ list = list来解决这个问题。我想。

答案 1 :(得分:0)

Tim的答案是正确的,但我可能会完全避免在form_for循环中提取部分内容。我认为这是一个风格问题,但我认为这里的混乱并不值得在这种情况下部分代表的清理。我可能会写一部分内容,包括整个表格。