循环内的一个按钮(mass_assignt)

时间:2012-06-26 18:09:14

标签: ruby-on-rails-3

我有一个表单,它有循环,如下所示。

我的目标:

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

1 个答案:

答案 0 :(得分:0)

我相信它是tasks.each do |task|是原因。 tasks为零,您在上面定义。

而不是

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

我可能会把它写成:

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

这将返回所有任务的数组,即使它是一个空数组。

然后调用.each不应该失败,因为它是空的。