使用Ransack Rails搜索多个模型4

时间:2014-12-16 19:08:30

标签: search ruby-on-rails-4 ransack

我正在试图找出如何使用Ransack搜索多个模型。目标是在我的共享标题中包含搜索表单。我正在使用他们的文档,旧的rails-cast,SO问题以及朋友与我分享的一些代码的组合。现在我认为它有效,虽然我不确定,因为我无法在我的索引页面上显示结果。

首先,我创建了一个搜索控制器:

class SearchController < ApplicationController  

    def index
            q = params[:q]
            @items    = Item.search(name_cont: q).result
            @booths = Booth.search(name_cont: q).result
            @users    = User.search(name_cont: q).result
        end
    end 

接下来,我将此代码放在标题部分(views / layouts / _header.html.erb)中:

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

我添加了一条路线:

get "search" => "search#index"

我的搜索控制器的index.html.erb是空的,我怀疑这是问题所在,但我不确定该放置什么。当我尝试类似的东西时:

<%= @items %>
<%= @users %>
<%= @booths %>

这是我执行搜索时得到的输出:

#<Item::ActiveRecord_Relation:0x007fee61a1ba10> #<User::ActiveRecord_Relation:0x007fee61a32d28> #<Booth::ActiveRecord_Relation:0x007fee61a20790>

有人可以指导我解决方案可能是什么?我不确定它是否是索引视图问题,路由问题或其他问题。在所有教程中,搜索字段和结果仅针对一个模型,因此我对如何在多个模型中实现这一点感到困惑。

谢谢!

1 个答案:

答案 0 :(得分:3)

您获得的输出是正确的。每个变量都包含一个ActiveRecord_Relation对象,可以像对待数组一样对待。通常你会做类似的事情:

<% @items.each do |item| %>
  <%= item.name %> # or whatever
<% end %>
<% @users.each do |user| %>
# and so on

或者,您可以合并结果@results = @items + @booths + @users,然后:

<% @results.each do |result| %>
  # display the result
<% end %>