2

Rails で作成しているフォーム内のパーシャルに対して :collection コマンドを使用すると問題が発生します。理想的には :collection コマンドを使用したいので、.rjs テンプレートでこのセクションを簡単に操作できます (チェック ボックスが変更されるとフォームが送信され、フォームが再読み込みされます。これは to-do リストです)。

このコードは機能します:

<% 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[] という名前ですが、object param と @object var が存在しないか、to_param: nil に応答しません。この行を参照しています: <li><%= f.check_box :completed %>. なぜこれがうまくいかないのか、さまざまなバリエーションを試してみましたが、うまくいきません。フォームが原因でこれを実行できませんか? form_for コードは、1 つのモデルから複数のオブジェクトをフォームにリストするための Rails Way book から直接引用したものです。

これに関するヘルプは大歓迎です。

4

2 に答える 2

3

問題は、render:partialと:collectionを使用しているときに、@listがどこにも定義されていないことだと思います。

f.check_boxを呼び出すと、システムはlist[]に一致する@listを探します。

それを回避するために、パーシャルに@list=listを設定できます。私は考えます。

于 2008-11-19T19:37:25.200 に答える
0

ティムの答えは正しいですが、おそらく form_for ループ内でパーシャルを完全に抽出することは避けたいと思います。スタイルの問題だと思いますが、ここでの混乱は、この場合のパーシャルが表すクリーンアップの価値はないと思います。おそらく、フォーム全体を含むパーシャルを書くでしょう。

于 2008-11-19T22:39:13.743 に答える