find_with_ferret,多个模型不起作用

时间:2010-04-13 09:44:57

标签: ruby-on-rails

我有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的一部分)。我想在其中包含注释字段以执行雪貂搜索。然后,还需要进行哪些其他更改。

1 个答案:

答案 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模型。