2014-12-16 4 views
3

Я пытаюсь выяснить, как искать несколько моделей с помощью Ransack. Цель состоит в том, чтобы иметь форму поиска в моем общем заголовке. Я использую комбинацию их документации, старые рельсы-литые, SO-вопросы и код, который мне поделил друг. Сейчас я думаю, что это работает, хотя я не уверен, потому что не могу показать результаты на моей индексной странице.Поиск нескольких моделей с Ransack Rails 4

Во-первых, я создал поисковую контроллер:

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 

Далее я ставлю этот код в заголовок частичного (мнения/макеты/_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> 

Может кто-то пожалуйста, руководство меня на то, что может быть решение? Я не уверен, что это проблема с представлением индекса, проблема маршрутизации или что-то еще. Во всех учебниках поле поиска и результаты представлены только для одной модели, поэтому я немного запутался в том, как это сделать для нескольких моделей.

Спасибо!

ответ

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 %> 
+0

Спасибо за помощь. Я был близок, но не достаточно близко. – Kelly

Смежные вопросы