将form_for替换为预设输入

时间:2013-12-11 10:22:32

标签: ruby-on-rails activerecord

我有一个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)

2 个答案:

答案 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