【问题标题】:Searching Multiple Models with Ransack Rails 4使用 Ransack Rails 4 搜索多个模型
【发布时间】:2015-02-15 04:53:56
【问题描述】:

我正在尝试弄清楚如何使用 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>

有人可以指导我解决可能的问题吗?我不确定这是索引视图问题、路由问题还是其他问题。在所有教程中,搜索字段和结果仅适用于一个模型,所以我对如何在多个模型中实现这一点有点困惑。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    你得到的输出是正确的。这些变量中的每一个都包含一个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 %>
    

    【讨论】:

    • 感谢您的帮助。我很接近,但还不够接近。
    猜你喜欢
    • 1970-01-01
    • 2013-05-22
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多