在我的应用中,我想使用两个按钮设置搜索表单。这些按钮中的每个按钮都应将请求发送到单独的控制器。像这样:
<%= form_tag(products_path, method: :get) do %>
Search Field <%= text_field_tag :q %>
<br>
<%= submit_tag 'First controller' %>
<%= submit_tag 'Second Controller' %>
<% end %>
这甚至可能吗?还是Rails只是以一种“一种形式-一个控制器”的方式强加给开发人员?
答案 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
答案 2 :(得分:1)
您已经用form_tag
定义了products_path
,通过它已经定义了控制器方法。
因此,回答您的问题时,您无法通过一个form
将发送请求传递给两个不同的控制器。
如果您想通过按钮传递某些状态,请尝试向按钮添加一些属性,并在控制器内部对其进行区分。