我有一个使用has_many:through关联的标签的产品模型。我想根据选定的标签在展示页面上显示类似的产品(为每个产品选择标签)。Rails使用标签显示类似的产品
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
我想你”已经编辑并添加了这个部分:'where.not('products.id'=> @ product.id)'这实际上是超级有用的,我没有想到它:)我最终与查询一起去了,似乎对我来说更“正确”。 – mohnstrudel