0

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

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”的未定义方法“名称”:字符串

有没有更直接的方法来创建对象类型的构面?如果没有,我做错了什么?

4

1 回答 1

2

没有什么比睡上 1/2 晚更好的了。可能有一种更优雅的方式,但这很好用......

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

def class_name
  self.class.name
end

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

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

searchable do
  string :class_name
end

然后只是:class_name在设置方面时引用。工作!

于 2013-04-11T14:11:39.967 回答