0

以下に示すように、ループのあるフォームがあります。

私の目的:

text   | checkbox |
text2  | checkbox |
text3  | checkbox |
text4  | checkbox |
______
button
------

ボタンをクリックすると、もちろんチェックボックスを選択するとテーブルが変わります。つまり、1 つのループを持つ 1 つのフォームの 1 つのボタンです。

問題:

最後の項目のみが正常に貼り付けられます (理由はわかりません) たとえば、最後の項目を変更した場合、これは問題ありませんが、最初の項目、たとえば 2 番目の項目、および最後の項目を変更すると、最後の項目のみが変更されます :(

私のループを見ないでください:(

私のショービュー

<%= form_for :task, :url => { :controller => :tasks, :action => :update } do |f| %>

  <% @tasks.each_with_index do |task, index| %>

    <%= f.fields_for task do |task_form| %>

      <%= task_form.text_field :task %>  | <%= task_form.check_box :is_active %>  <%= task_form.hidden_field :id %>

    <% end %>

  <% end %>

  <br/><br/>

  <%= f.submit 'Update' %>


<% end %>

私のコントローラー:

 def show

    @tasks=Task.find(:all)

  end

  def update

    tasks=Task.find(:all, :conditions => ["id=?", params[:task][:id]])


    tasks.each do |task|

    task.task=params[:task][:task]
    task.save

    end
 end

そして、それは私が得るエラーです:

{"utf8"=>"✓",
 "authenticity_token"=>"vn0DUQhRa2zBguCFRf/fY/cYnzKYAkio0MwDUd4/mC8=",
 "task"=>{"task"=>{"task"=>"dlaj testa!",
 "is_active"=>"1",
 "id"=>"11"}},
 "commit"=>"Update"}

undefined method `each' for nil:NilClass
4

1 に答える 1

0

と言われてtasks.each do |task|いるのが原因だと思います。tasks上で定義した nil です。

それ以外の

tasks=Task.find(:all, :conditions => ["id=?", params[:task][:id]])

私はおそらく次のように書くでしょう:

tasks = Task.where(id: params[:task][:id])

これは、空の配列であっても、すべてのタスクの配列を返します。

.each空であるため、呼び出しは失敗しません。

于 2012-06-26T18:31:16.650 に答える