рельсы одно поле поиска обрабатывается двумя контроллерами - PullRequest
0 голосов
/ 24 ноября 2018

В моем приложении я хочу установить форму поиска с двумя кнопками.Каждая из этих кнопок должна отправлять запрос на отдельный контроллер.Примерно так:

<%= form_tag(products_path, method: :get) do %>
  Search Field <%= text_field_tag :q %>
  <br>
  <%= submit_tag 'First controller' %>
  <%= submit_tag 'Second Controller' %>
<% end %> 

Возможно ли это вообще?Или рельсы просто навязывают разработчику способ «одна форма - один контроллер»?

Ответы [ 3 ]

0 голосов
/ 24 ноября 2018

Вы уже определили form_tag с помощью products_path, с помощью которого метод контроллера уже определен.

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

Если вы хотите передать какой-то статус кнопкам, попробуйте добавить к ним некоторые атрибуты и выделить их внутри контроллера.

0 голосов
/ 24 ноября 2018

HTML5 добавил некоторые атрибуты к элементам INPUT и BUTTON.Одним из них является formaction, поэтому вы можете установить действие, запускаемое каждой кнопкой независимо, и оно переопределяет действие формы по умолчанию.

<%= form_tag(products_path, method: :get) do %>
  Search Field <%= text_field_tag :q %>
  <br>
  <%= submit_tag 'First controller' #triggers the default action %>
  <%= submit_tag 'Second Controller', formaction: another_path %>
<% end %>

https://www.w3schools.com/tags/att_input_formaction.asp

0 голосов
/ 24 ноября 2018

Используйте JavaScript для изменения URL-адреса формы в зависимости от нажатой кнопки.

<%= form_tag(first_controller_path,id: 'search-form', method: :get) do %>
  Search Field <%= text_field_tag :q %>
  <br>
  <button type='submit' id="form-submit-button">First Controller</button>
  <button type='button' id="second-controller-button">Second Controller</button>
<% end %> 

<script>
$(function(){
   $("#second-controller-button").on("click",function(e){
      e.preventDefault();
      var form = document.getElementById('search-form');
      form.action = '<%= second_controller_path %>' ;
      form.submit(); // Or you could also try document.getElementById("form-submit-button").click();
   })
});
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...