Скажем, у меня есть модель статьи, а в представлении «Настройки» модели статьи у меня есть две кнопки отправки вне формы: «Обновить детали» и «Следующий шаблон».

У меня вопрос: как узнать, какая кнопка нажата на контроллере . Обе кнопки отправки находятся за пределами простой формы. Я пробовал:

 <%= f.submit "update Details",name: "update_details", class: "x-update" %>


<%= f.submit 'Next Template', name: "next_template", class: "x-next" %>

И логика такая же на контроллере

   if params[:update_details]
      [..]
   elsif params[:next_template]
      [..]
   end

Но это не работает. Как я могу это сделать? Я не могу изменить маршрут, так есть ли способ отправить другую переменную, которую подбирает [: params]?

1
Bharat Bhushan 30 Окт 2015 в 15:05

4 ответа

Лучший ответ

Я решил это, добавив в ваш шаблон формы html:

<input type="hidden" name= "action_type" id="action_type">

Затем в файле JavaScript мы добавили

$('.x-update').on 'click', ->
$("#action_type").val("exit")
$("#details-form").submit()

А затем в файле контроллера мы проверили параметры:

if params[:action_type] == "exit"
  redirect_to #your desired path
else
  redirect_to #based on given path

Это оно. Оно работает.

0
Bharat Bhushan 2 Ноя 2015 в 06:58

Пожалуйста, попробуйте поместить обе кнопки внутри формы, а затем попробуйте с той же логикой.

-1
Anna88 31 Окт 2015 в 02:33

Попробуйте в контроллере проверить, какие параметры вы получаете при запуске отправки.

render plain: params

Дополнительно Вы можете использовать опцию "hidden_field_tag" в боковой части формы.

<%= hidden_field_tag 'plan', params[:plan] = 2 %>
0
7urkm3n 2 Ноя 2015 в 07:28

Думаю, можно сделать что-то вроде этого:

<%= f.submit "update Details",name: "update_details", value: true, class: "x-update" %>
<%= f.submit 'Next Template', name: "next_template", value: true, class: "x-next" %>

При желании, я думаю, вы можете использовать одинаковые имена и разные значения.

<%= f.submit "update Details",name: "next_template", value: false,  class: "x-update" %>
<%= f.submit 'Next Template', name: "next_template", value: true, class: "x-next" %>

И в контроллере:

if params[:next_template]
  something
else
  something_else
end
1
ZebThan 30 Окт 2015 в 12:28