有没有办法混合名为范围的轨道和思考sphinx范围?

pix*_*rth 5 named-scope ruby-on-rails thinking-sphinx

有没有办法混合命名范围和狮身人面像范围?我不敢相信没有.

我在课程中有狮身人面像指数.一旦用户购买课程,他们就会有一个屏幕,可以看到他们所有课程的列表.我希望他们在网站范围内的课程中执行相同的搜索,但确定他们拥有的搜索范围.

对于仅限sphinx的范围,这显然是不可能的,因为我没有索引采购数据,我认为我也不应该这样做.

有没有办法实现这个目标?

这就是我到目前为止"结合"这两个系统的原因.对我来说似乎很骇然但它有效:

lesson_ids = current_user.active_products_by_type(:lessons).collect{|x| x.id}
@lessons = Lesson.active_scope.search :with => {:id => lesson_ids }
Run Code Online (Sandbox Code Playgroud)

pat*_*pat 3

active_products_by_type考虑到我不确定范围和active_scope范围(哪个是 Sphinx?两者都不是?),很难判断您的解决方法是否合适。

但您无法在搜索调用中调用 AR 范围,因为 AR 范围是在后台构建的,用于生成 SQL 查询。Sphinx 有自己的查询协议,这就是 Thinking Sphinx 添加 Sphinx 作用域的原因。除此之外,Sphinx 在搜索时无法引用数据库(仅在索引时),因此对 Sphinx 看不到的数据的任何引用也不会有帮助。

话虽如此,代码中可能没有任何内容可以让您将搜索调用链接到 AR 范围 - 您甚至可能会返回结果 - 但这是因为范围会影响Model.findThinking Sphinx 将搜索结果转换为的调用模型实例。结果是,虽然您可能会看到对象,但 AR 范围仅应用于搜索结果的给定页面,并且分页数学(页面数/总结果)将不可靠。

呃,这变成了一篇文章,但希望它能有所帮助......