2012-06-26 50 views
0

我有一個窗體,它有循環,如下所示。循環內的一個按鈕(mass_assignt)

我的目標:

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

如果我點擊了按鈕,我的表的變化,如果我選擇當然複選框。所以它的One按鈕就有一個循環。

問題:

只有最後一個被成功粘貼,(不知道爲什麼),例如,如果我改變了最後一個項目,這是確定的,但是當我改變了第一個,第二個,例如和最後一個,我得到只有在最後一次:(

犯規變化查閱我的循環,我認爲:(

我的表演視圖

<%= 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 

回答

0

我相信這是說,tasks.each do |task|是原因。 tasks是零,你在上面定義。

而不是

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

,我可能會寫爲:

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

,將返回所有任務的數組,即使它是一個空數組。

然後調用.each不應該失敗,因爲它是空的。