find_with_ferret, множественная модель не работает - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть 2 модели A и B.

class A < ActiveRecord::Base
  has_one :b

acts_as_ferret :fields => [:title,:description]

В a_cotroller я написал:

@search=A.find_with_ferret(params[:st][:text_search],:limit => :all).paginate :per_page =>10, :page=>params[:page]

Приведенный выше поиск по названию и описанию работает правильно.

класс B

Теперь я хочу выполнить текстовый поиск, используя 3 поля; заголовок, описание (часть А) и комментарий (часть Б). Где я хочу включить поле комментария, чтобы выполнить поиск хорька. Затем, какие другие изменения необходимы.

1 Ответ

0 голосов
/ 13 апреля 2010

Документация find_with_ferret указывает, что вы просто набираете :store_class_name => :true, чтобы включить поиск по нескольким моделям. Хотя это и правда, в этом есть немного больше. Для поиска нескольких сделайте следующее:

@search = A.find_with_ferret(
  params[:st][:text_search],
  :limit => :all,
  :multi => [B]
).paginate :per_page =>10, :page=>params[:page]

Обратите внимание на параметр multi. Это массив дополнительных индексов для поиска.

Теперь, чтобы заставить его работать, вы должны перестроить свои индексы после добавления :store_class_name => :true к определениям индекса.

class A < ActiveRecord::Base
  has_one :b

  acts_as_ferret :store_class_name => :true, :fields => [:title, :description]
end

OR ...

Вы можете просто включить поля Bs в определение индекса:

class A < ActiveRecord::Base
  has_one :b

  acts_as_ferret :fields => [:title, :description],
                 :additional_fields => [:b_content, :b_title]

  def b_content
    b.content
  end

  def b_title
    b.title
  end
end

Это упрощает все, но не позволяет искать модель B независимо от A.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...