2009-07-21 5 views
0

Railscasts сделал отличный учебник о том, как сделать несколько изменений из выделения. Но я хочу возвысить его. Что делать, если я хочу делать больше действий (редактировать и уничтожать)? Это похоже на способность gmails готовить различные действия по почте.Ruby on Rails - множественное редактирование

Я создал свою форму, и у меня есть раскрывающееся меню действия. Форма переходит к действию в моем контроллере, который должен перенаправить его на правильное действие (edit vs destroy). Я пытаюсь сделать это с помощью redirect_to и передать свои параметры, но он работает неправильно.

def action 
    if params[:perform_action] == 'edit' 
    redirect_to :action => 'edit_multiple', :structure_ids => params[:structure_ids] 
    elsif params[:perform_action] == 'destroy' 
    redirect_to destroy_multiple_structures_path, :structure_ids => params[:structure_ids] 
    end 
end 

Но это не работает должным образом. Мой edit_multiple фактически перенаправлен на действие show. Хотя я его настраивал на своих маршрутах и ​​все.

Как правильно передать параметры? Или это вопрос метода, которым его передают (и если да, то как это изменить?) Или что это правильный способ сделать это (если это не так)?

Я устал от прохождения параметров, но это не сработало.

Я использую коллекцию в routes.rb, но я не могу понять, как изменить redirect_to на предоставление POST. Есть идеи?

+0

также, у меня есть edit_multiple_structures_path, но я не могу понять, как передать параметры вместе с ним. – RyanJM

ответ

1

Хорошо, я не могу понять, как получить метод для изменения в redirect_to, и я не могу понять, как правильно получить параметры. ПОЭТОМУ Я «надул» и использовать JQuery, чтобы изменить действие самой формы:

$("#action").change(function(e){ 
    var changeTo = $(e.target); 
    var value = changeTo.attr("value"); 
    if(value == 'edit'){ 
     $("form").attr("action","/myController/edit_multiple"); 
     $("form").attr("method","POST"); 
    } 
    if(value == 'destroy'){ 
     $("form").attr("action","/myController/destroy_multiple"); 
     $("form").attr("method","DELETE"); 

    } 
}); 

Его не оптимизирован, но это работает. И действие - это идентификатор тега select. Надеюсь, что это помогает кому-то другому.

0

FYI- update_all или delete_all - ваш друг, здесь.

0

Gmail-подобные функции для удаления, архивации и т. Д. Не нуждаются в форме, поэтому просто создайте кнопку или ссылку с требуемой функциональностью. Вам нужна только форма для изменения содержимого.