跟踪由两个控制器处理的一个搜索字段

时间:2018-11-24 01:49:34

标签: ruby-on-rails ruby ruby-on-rails-5

在我的应用中,我想使用两个按钮设置搜索表单。这些按钮中的每个按钮都应将请求发送到单独的控制器。像这样:

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

这甚至可能吗?还是Rails只是以一种“一种形式-一个控制器”的方式强加给开发人员?

3 个答案:

答案 0 :(得分:2)

使用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>

答案 1 :(得分:2)

HTML5向INPUT和BUTTON元素添加了一些属性。其中之一是post_id_id,因此您可以独立设置每个按钮触发的操作,它会覆盖默认的表单操作。

formaction

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

答案 2 :(得分:1)

您已经用form_tag定义了products_path,通过它已经定义了控制器方法。

因此,回答您的问题时,您无法通过一个form将发送请求传递给两个不同的控制器。

如果您想通过按钮传递某些状态,请尝试向按钮添加一些属性,并在控制器内部对其进行区分。