【发布时间】:2017-12-01 13:29:27
【问题描述】:
我有2个模型Recipe和Category,它们与has_and_belongs_to_many关联,现在我需要按类别过滤食谱,当用户检查类别时,我会收到检查的类别ID数组,并创建一个过滤食谱的范围,如下所示:
scope :filter, -> (category_ids){ includes(:categories).where(categories: {id: category_ids}) if category_ids.present? }
并在配方控制器中使用此范围
Recipe.filter(params_index[:category_ids])
私人
def params_index
params.permit(category_ids: [])
end
问题在于,如果任何类别 id 与用户传递的 category_id 匹配,它就会返回食谱,例如,如果用户检查了早餐和沙拉,我的过滤器会返回所有早餐和所有沙拉,但我只需要包含这两个类别的食谱早餐和沙拉。我可以使用 activerecord 执行此操作吗?查询 db 的外观应该如何?我正在使用 rails 5 和 postgresql。希望得到您的帮助)
【问题讨论】:
-
group(:recipe_id).having("count(*) = ? ", category_ids.size)? -
我将 :recipe _id 替换为 :id 并且效果很好。谢谢!非常喜欢!)
标签: ruby-on-rails ruby postgresql activerecord rails-activerecord