Ruby on Rails - устранение неполадок в цикле частичного использования коллекции - PullRequest
2 голосов
/ 19 ноября 2008

У меня проблемы с использованием команды: collection для партиала внутри формы, которую я создаю в rails. В идеале мне бы хотелось использовать команду: 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 %>   

с частичным:

<% 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 var не существуют или не отвечают на to_param: nil. Это относится к этой строке: <li><%= f.check_box :completed %>. Я не уверен, почему это не работает и перепробовал много разных вариантов, но я не могу заставить его работать. Форма мешает мне сделать это? Код form_for прямо из книги Rails Way для перечисления нескольких объектов из одной модели в форме.

Любая помощь по этому вопросу будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 19 ноября 2008

Я думаю, что проблема в том, что вы нигде не определили @list, когда используете render: частично с a: collection.

Система ищет @list для соответствия списку [] при вызове f.check_box

вы можете установить @list = list в своей части, чтобы обойти это. Я полагаю.

0 голосов
/ 20 ноября 2008

Ответ Тима верный, но я бы, вероятно, вообще не стал извлекать частичное из цикла form_for. Я предполагаю, что это вопрос стиля, но я думаю, что путаница здесь не стоит того, что частичное представляет в этом случае. Вероятно, я бы написал часть, включающую всю форму.

...