我有一个表单,它有循环,如下所示。
我的目标:
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 :(得分:0)
我相信它是tasks.each do |task|
是原因。 tasks
为零,您在上面定义。
而不是
tasks=Task.find(:all, :conditions => ["id=?", params[:task][:id]])
我可能会把它写成:
tasks = Task.where(id: params[:task][:id])
这将返回所有任务的数组,即使它是一个空数组。
然后调用.each
不应该失败,因为它是空的。