Ruby on Rails洗劫宝石搜索

时间:2018-10-14 10:03:32

标签: ruby-on-rails ruby ransack

我想实现跨多个模型的搜索。

找到了这个stackoverflow question here,它使用了ransack并立即进行了尝试。但我似乎无法使其正常工作。

在我的控制器中:

def search
  @quotes = Quote.search(title_cont: q).result
  @books = Book.search(title_cont: q).result
  @users = User.search(username_cont: q).result
end

路线

get '/search', to: 'application#search'

视图

<%= form_tag search_path, method: :get do %>
  <%= f.label :title_cont %>
  <%= f.search_field :title_cont %>
  <%= text_field_tag :q, nil %>
<% end %>

2 个答案:

答案 0 :(得分:0)

您应该使用params[:q]而不是q。这应该起作用

def search
  @quotes = Quote.search(title_cont: params[:q]).result
  @books = Book.search(title_cont: params[:q]).result
  @users = User.search(username_cont: params[:q]).result
end

此外,f.label和f.search_field不适用于form_tag。您应该改用label_tagsearch_field_tag

<%= form_tag search_path, method: :get do %>
  <%= label_tag :title_cont %>
  <%= search_field_tag :title_cont %>
  <%= text_field_tag :q, nil %>
<% end %>

答案 1 :(得分:0)

为什么您的搜索表单中有两个字段,所以您应该只有一个搜索字段。

<%= form_tag search_path, method: :get do %>
  <%= label_tag :title_cont %>
  <%= search_field_tag :q %>
<% end %>