我正试图建立一个搜索功能,为我的应用程序,并遇到了一些问题,能够搜索有许多关联。我希望它的设置,使用户只看到他们有权访问的项目。
在我的用户模型中,我有:
class User < ApplicationRecord
searchkick
has_many :items, -> (user) { unscope(:where).where("(consumer_type = ? and consumer_id = ?))", 'User', user.id) }, fully_load: false, dependent: :destroy
# not sure if this is helpful, was messing around with this
def search_data
{
name: items.name
}
end
end
在我的项目模型中,我有:
class Item < ApplicationRecord
belongs_to :consumable, polymorphic: true
belongs_to :consumer, polymorphic: true
end
然后我有两个模型,“书”和“相机”属于该项目。我需要能够在控制器中运行查询,例如:
@results = current_user.items.search('Query')
... 因此,它将返回与搜索查询匹配的图书和相机结果。我阅读了searchkick文档的个人化结果部分,但根本无法让它工作。任何有用的提示,或有人取得了一些类似的范围界定结果的特定用户?
1条答案
按热度按时间bvjxkvbb1#
像这样搜索是不可能的。如果是这样,那么从两个数据源进行查询并获得结果集的交集将影响性能。因此,从项目结尾开始,并将用户信息包含到该模型中。