我有一个多用户网站,我希望用户能够以全文多模式搜索只有自己的内容。自定义pg_search只显示当前用户的内容
我的工作模型belongs_to :: users。下面是work.rb的一个片段:
class Work < ApplicationRecord
include PgSearch
belongs_to :user
…
理想的情况是这样的事情在我的控制器:
@results = PgSearch.multisearch('spring').where(:_user_id => current_user.id)
我能够很容易地做到这一点使用Searchkick宝石与Elasticsearch通过使用此代码行:
@results = Searchkick.search query, where: {user_id: current_user.id}
不幸的是我不能使用Elasticsearch。
如何在pg_search中实现类似的功能?
非常感谢
我试过类似的方法,它已经使用了:if属性。问题是我需要从我的模型中调用current_user。尽管你不应该这样做,但我设法使用自定义模块来获取模型中的current_user对象,但它破坏了搜索索引功能。 'multisearchable:against => [:title,:year,:user_id],:if => lambda {| record | record.user_id == Current.user.id}' 也许你有更好的方式在模型中做到这一点? 再次感谢 – Dauncing
我有一个解决方法,但我认为它不会在规模上表现良好。以下代码可以加载到搜索控制器'results = PgSearch.multisearch(query).map(&:searchable).select {| record | record.user_id == current_user.id} .sort_by(&sortField.to_sym)'如果有人可以提出建议,会喜欢更优雅的解决方案。 – Dauncing