Rails 太阳黑子:在 if 语句中对"with"范围进行建模属性/方法调用



在太阳黑子搜索中,是否可以在太阳黑子范围的if语句中使用当前模型的属性?

UserFile.search do
  keywords searchstring
  order_by :last_edit_date
  with(:visibility,true) if some_method?(:user_id)
  paginate :page => page, :per_page => Pagination::FILES_PER_PAGE if page
end

在此示例中,我想使用 UserFile 模型的 :user_id 属性调用具有复杂逻辑的 some_method?(此方法将涉及 ActiveRecord 查询)。

我试图限制搜索结果,以便如果 UserFile 的可见性为"1"(仅限朋友)或"2"(私有),则其所有者是搜索者陌生人(不是搜索者的朋友,也不是搜索者本人)的文件不会出现,并且如果出现以下情况,则所有者是搜索者的朋友的文件不会出现:可见性为"2"(专用)。

使用Solr/Sunspot是否可以做到这一点,或者搜索完成后我是否必须过滤掉结果?我不想诉诸于此,因为它会使分页变得困难。

您无法执行此操作,因为search块只是将参数传递给 Solr 以进行搜索。如果你想纯粹在Solr中执行此过滤(并且实际上比使用数据库搜索更快),则需要索引可以看到每条记录的用户ID:

在可搜索块中

integer :viewer_ids, references: User, multiple: true do
  some_method_that_returns_viewer_ids
end

您还需要确保保存任何记录会更改这些记录,从而触发重新索引。

相关内容

  • 没有找到相关文章

最新更新