我加入pg_search到Rails应用程序。 我不完全理解的配置,并希望在正确的方向轻柔微调。
首先,我已经有一个多模式的网站或多或少地设置和我的应用程序运行。 但我想扩展它同时搜索上相关的模型。
例如,我有制造商,汽车,模型类。 目前,如果我搜索“福特”,只返回厂家。 我也想返回所有相关汽车(属于制造商)和模型(属于汽车)。
我可以看到如何做到这一点的范围内进行搜索
class Car
pg_search_scope :manufactured_by, :associated_against => {
:manufacturer => [:name]
}
end
但是,如果我尝试这样做对multisearch它不工作
class Car
include PgSearch
multisearchable :against => [:name],
:associated_against => {
:manufacturer => [:name]
}
end
它不产生一个错误,它根本不拿起相关的记录。
我有一种感觉,我失去了一些东西基本在我的这一切是如何结合在一起的认识。 我会很感激,如果有人可以帮助我了解这一点,或点我对信息的良好来源。 我已经通过在GitHub和相关Railscast的信息,但我仍然失去了一些东西。
这是不可能的搜索相关记录与multisearch,由于多态关联在Rails和SQL是如何工作的。
我要补充,说明情况的错误,以便在将来也不会是令人费解。
对困惑感到抱歉。
你可以做的反而是定义返回你希望搜索对文本上车的方法。
class Car < ActiveRecord::Base
include PgSearch
multisearchable :against => [:name, manufacturer_name]
belongs_to :manufacturer
def manufacturer_name
manufacturer.name
end
end
或者更加简洁,你可以委托:
class Car < ActiveRecord::Base
include PgSearch
multisearchable :against => [:name, manufacturer_name]
belongs_to :manufacturer
delegate :name, :to => :manufacturer, :prefix => true
end
但是,你必须确保你永远做一个名称变更为制造商实例pg_search_documents表得到更新,所以你应该增加:touch => true
到其关联关系:
class Manufacturer < ActiveRecord::Base
has_many :cars, :touch => true
end
这样,当制造商更新,它会调用所有的汽车记录,活动记录的回调,这将触发pg_search回调更新存储在相应的pg_search_documents项搜索的文本。