14

我有三个模型(User, Tag, Product),它们交互 stUser有很多TagsProducts

出于搜索目的,我希望能够(使用一个搜索栏)搜索用户名、标签名称和产品描述。我也想在产品页面上搜索,但这仅与标签名称和产品描述相关。

这里有两个例子:

搜索:“Linus Torvalds”返回三个模型中的所有 Linus Torvalds 实例,其中用户名的任何实例都位于更高的位置。

搜索:“Linux”,年龄:“20-25”返回用户的所有实例,其产品名称/描述中包含“Linux”且属于该年龄范围,以及标签包含“Linux”和谁的用户有属于该年龄段的产品。请注意,如果搜索不包括年龄,那么它将默认为所有符合“Linux”部分的人,而不是没有人。

我的问题是这样做的最佳方法是什么?我应该使用自己的控制器创建搜索模型吗?我应该忽略它并在共享文件夹中包含搜索部分吗?还有哪些其他方法?

非常感谢。

4

1 回答 1

23

如果您正在执行任何复杂的条件,我喜欢 Search 对象的想法。

但是要使用太阳黑子搜索对象:

@sunspot_search = Sunspot.search User, Tag, Product do |query| 
  query.keywords @search_query
  query.with(:age).greater_than 20
  query.with(:age).less_than 25
  query.paginate(:page => params[:page], :per_page => 30)
end
于 2011-05-17T22:42:02.187 回答