尝试使用Rails上的sunspot在对象类型上实现构面

时间:2013-04-11 00:57:47

标签: ruby-on-rails-3 sunspot-rails

我的基本目标是根据返回的对象类型创建构面,而不是基于各种对象的任何特定字段。 我在我的控制器中搜索了多种类型的对象。它看起来像这样:

def search
  @raw_results = Sunspot.search ProductReview, Vendor, Product do |query|
    query.fulltext(params[:search])
    query.facet(:class)
    query.with(:class, params[:item_type]) if params[:item_type].present?
  end
  @returned_items = @raw_results.results
end

如果我使用 / search?search = note 调用此控制器,我会找回正确的项目和正确的构面列表。

我添加了query.with(:class, params[:item_type])行,现在如果我调用链接 / search?item_type = ProductReview& search = notes ,我收到错误:

“ProductReview”的未定义方法“name”:String

是否有更简单的方法在对象类型上创建构面?如果没有,我做错了什么?

1 个答案:

答案 0 :(得分:2)

没有什么比睡个好半夜好。可能会有更优雅的方式,但这很有效......

我在每个我想要索引的模型中添加了一个新方法(class_name):

def class_name
  self.class.name
end

(实际上,我将其放入一个名为SharedMethods的模块中,并在每个模型中包含SharedMethods。)

在每个模型的searchable块中,我添加了:

searchable do
  string :class_name
end

然后在设置构面时引用:class_name。工作!