【发布时间】:2016-03-06 22:21:42
【问题描述】:
我有一个带有标签的产品模型,该模型使用 has_many :through 关联。我想根据选定的标签在展示页面上显示类似的产品(为每个产品选择标签)。
class Product < ActiveRecord::Base
has_many :product_tags
has_many :tags, through: :product_tags
end
假设我有 3 个产品和 2 个标签 - “狗”和“猫”(用于狗粮和猫粮)。
产品 1 和 2 的标签设置为“狗”。产品 3 的标签设置为“猫”。
因此,产品 1 显示页面上所需的输出是产品 2 显示在“您可能还感兴趣的项目”部分中。产品 3 不应在那里显示。
我的控制器中的正确方法是什么?
我现在的想法是使用 & - 运算符,即
(@product_1.product_tags & @product_2.product_tags).empty?
如果不为空,则显示产品。但是如何在我的控制器中通过查询来完成此操作?
这是我的尝试
def show
@product = Product.find(params[:id])
@similar_products = Product.where(!(tags & @product.tags).empty?)
end
但它显然不起作用。如何访问查询中的关联模型?我也找到了this 解决方案,但它对我不起作用:
Product.joins(:tags).where((:tags & @pr1.tags).empty?).all
NoMethodError: undefined method `&' for :tags:Symbol
【问题讨论】:
标签: ruby-on-rails activerecord associations