gpt4 book ai didi

ruby-on-rails - 在 Rails 中过滤关系

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:25 24 4
gpt4 key购买 nike

我的 Product 模型中有这种关系:

has_many :features, :class_name => 'ProductFeature', :source => :product_feature, :include => :feature

所以我可以做 Product.features

效果很好。但我希望能够在必要时按 feature 表中的字段对其进行过滤。例如在伪代码中:

find all product features where feature is comparable

comparefeature 上的 bool 字段。

我已经尝试了 2 个小时,但无法弄清楚(没有完全编写新查询)。我不知道如何从 Product.features 关系访问 feature 表的字段,因为它似乎只能过滤 product_features字段。

这是我到目前为止的想法:

def features_compare
features.feature.where(:compare => true)
end

但它只是说 feature 不是一个有效的方法,我理解这一点。

编辑

我已经更新了我的模型,因此关系更加清晰:

产品.rb:

class Product < ActiveRecord::Base
belongs_to :company
belongs_to :insurance_type

has_many :product_features
has_many :reviews

attr_accessible :description, :name, :company
end

product_feature.rb:

class ProductFeature < ActiveRecord::Base
belongs_to :product
belongs_to :feature

delegate :name, :to => :feature

attr_accessible :value
end

特征.rb

class Feature < ActiveRecord::Base
attr_accessible :name, :compare
end

我希望能够查询属于 productfeatureproduct_features,其中 Feature.comparetrue。像这样:

产品.rb

def features_compare
product_features.where(:compare => true)
end

这会引发错误,因为 compareFeature 模型中,而不是在 ProductFeature 中。我在 product_feature.rb 中尝试了以下内容:

delegate :compare, :to => :feature

但我没有帮忙。

我会在几个小时内为此添加赏金,所以请帮助我!

最佳答案

找到所有产品特性,其中特性是可比较的就是

ProductFeature.joins(:feature).where(:feature => {:compare => true})

您可以通过引入作用域来提高它的可重用性:

#in product_feature.rb
scope :with_feature_like, lambda do |filter|
joins(:feature).where(:feature => filter)
end

#elsewhere
ProductFeature.with_feature_like(:compare => true)

#all the product features of a certain product with at comparable features
some_product.product_features.with_feature_like(:compare => true)

最后,如果您希望所有产品的产品特性都具有可比较的特性,您需要类似的东西:

Product.joins(:product_features => :feature).where(:feature => {:compare => true})

当然,您也可以将其转换为 Product 的作用域。

关于ruby-on-rails - 在 Rails 中过滤关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com