我有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级&lt;的ActiveRecord :: Base的 belongs_to:a
现在,我想使用3个字段执行文本搜索;标题,描述(A的一部分)和评论(B的一部分)。我想在其中包含注释字段以执行雪貂搜索。然后,还需要进行哪些其他更改。
答案 0 :(得分:0)
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
这使一切变得简单,但不允许独立于A搜索B模型。