Документация 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.