我有一个form_for,它有一个输入文本字段,输入的文本被发送到控制器,该控制器正在从数据库中搜索表。
但是我想做一些不同的事情,而不是在文本字段中输入文本,我想创建默认的搜索查询。这将是带有文本的按钮,并且基于该文本,参数将被发送到控制器并进行搜索。
我该怎么做?我正在使用Rails 4
我的form_tag
<%= form_tag pos_project(@project), method: :get do %>
<p>
<%= text_field_tag :query, params[:query] %>
<%= submit_tag "Search", name: nil %>
</p>
<% end %>
我想要实现的目标:
按钮:(按钮中的文字) - &gt;为myButton
单击此按钮时,文本MyButton
将被发送到控制器,控制器将获取参数,并查询db表并使用以下查询显示包含文本MyButton的结果。
where("name @@ :q", q: query)
答案 0 :(得分:1)
为什么不使用HTML和Javascript:
<!-- in your view -->
<%= form_tag pos_project(@project), method: :get, id: "your_search_form" do %>
<p>
<%= hidden_field_tag :query, params[:query] %>
<%= submit_tag "Search", name: nil %>
</p>
<% for value in your_preset_values do %>
<%= link_to(value, '#', data: { search_query_value: value }, class: "search-query-link")
<% end %>
在你的coffee.js文件中:
# A class for the Search form JS
class SearchForm
constructor: ->
# when a search query link is clicked...
$('a.search-query-link').click (e) ->
# find the value from the data attribute
searchQuery = $(this).data('search-query-value')
# assign the value to the hidden field
$("input[type='hidden']#query").val(searchQuery)
# optional - submit the form
$("#your_search_form")[0].submit()
# Called when the document is loaded
jQuery ->
new SearchForm()
答案 1 :(得分:0)
您可以使用参数中的“commit”来查找按下的按钮。
所以在控制器中你会得到
params[:commit]="button1" # or
params[:commit]="button2" # or
params[:commit]="button3" # based on which button you pressed