我正试图让以下工作-基本上,按钮提交到searches_controller索引操作,并且应该将参数[:search_task]传递给它。但由于某种原因,它不起作用。
<div class="btn-group InterestGroup" role="group" aria-label="">
<button class = "btn btn-success InterestStatButton"><%= User.tagged_with(interest, :on => :tags, :any => true).count %></button>
<%= button_to interest, searches_path, :method => :get, :class => "btn btn-default InterestLabelButton" %>
<%= hidden_field_tag :search_task, interest, :id => "search", :class => "form-control" %>
</div>
在标题的同一页上,我在标题中有这个,这是一个输入字段,做同样的事情,工作得很好。如果你看看每个人在HTML中产生的东西,我不明白的是,第一个代码块中的隐藏字段与第二个代码块中的form_tag中的输入相同。
<%= form_tag searches_path, html: {class: "navbar-form navbar-left"}, :method => :get do %>
<div class="form-group" style="display:inline;">
<div class="input-group" style="display:table; width:350px;">
<span class="input-group-addon" style="width:1%;"><span class="glyphicon glyphicon-search"></span></span>
<%= text_field_tag :search_task, nil, class: "form-control", id: "search", placeholder: "Search for members or content", label: false %>
</div>
</div>
<% end %>
问题是button_to
是一个自包含的方法(IE你不能传递块等):
生成一个包含提交到URL的单个按钮的表单由一组选项创建。
使用
<%= button_to interest, searches_path, :method => :get, :class => "btn btn-default InterestLabelButton" %>
<%= hidden_field_tag :search_task, interest, :id => "search", :class => "form-control" %>
…它不会被添加到表单中,因此不会被传递。
如何添加额外的参数到button_to表单?
您需要的是将search_task
参数添加到button_to
帮助器:
<%= button_to interest, searches_path, method: :get, class: "btn btn-default InterestLabelButton", params: { search_task: interest } %>
button_to
表单默认发送POST
请求。这将屏蔽传递的参数;如果您想使用GET
,那么您已经做了正确的事情并声明了它。一个重要的注意事项是GET
请求将参数附加到请求URL。
您可以在这里阅读更多信息:http://www.w3schools.com/tags/ref_httpmethods.asp