我有一個多用戶網站,我希望用戶能夠以全文多模式搜索只有自己的內容。自定義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