在太阳黑子搜索中,是否可以在太阳黑子范围的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
您还需要确保保存任何记录会更改这些记录,从而触发重新索引。