2012-06-26 2 views
0

У меня есть форма, которая имеет петлю, как вы можете видеть ниже.Одна кнопка внутри цикла (mass_assignt)

Моя цель:

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

Если я нажал на кнопку мои изменения таблицы, если я выбираю опцию конечно. Таким образом, его одна кнопка в одной форме имеет один цикл.

ПРОБЛЕМА:

Только в прошлом один наклеивается успешно, (не знаю почему), например, если я изменил последний элемент, это нормально, но когда я изменил первый, второй, например, и последний, я получаю изменения только в прошлом один :(

Doesnt SEE MY LOOP я думаю :(

мое шоу вид

<%= 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 не должен терпеть неудачу, так как он пуст.

Смежные вопросы