如何通过has_many关联循环访问 ActiveRecord 关系

How to iterate over ActiveRecord relation through a has_many association

提问人:daveasdf_2 提问时间:11/9/2023 更新时间:11/10/2023 访问量:32

问:

所以我有某些冰淇淋,我想在其中获得安大略省低脂冰淇淋和未过期冰淇淋的销售额。

冰淇淋has_many ontario_sales_receipts:

included_ice_cream = IceCream.produced_this_or_previous_month.where(low_fat: true, expired: false)

final_amount = included_ice_cream.ontario_sales_receipts.pluck(:number_of_buckets).sum * BUCKET_PRICE

但这导致:

undefined method `ontario_sales_receipts' for #<IceCream::ActiveRecord_Relation:0x0055de80e3ffa8>

如何使 ActiveRecord 关系中的has_many关联可用?

我最初可以查询 OntarioSaleRecept,但我不知道如何根据它们与特定冰淇淋的has_one关联来查询它们

included_ontario_sales_receipts = OntarioSalesReceipt.where( their associated IceCream is lowfat and non expired ... )
Ruby-on-Rails 关联 rails-activerecord

评论

0赞 Les Nightingill 11/9/2023
尝试这是因为该方法是 IceCream 实例上的方法,而不是集合(AR 关系)final_amount = included_ice_cream.collect{|iic| iic.ontario_sales_receipts.pluck(:number_of_buckets) }#ontario_sales_receipts
0赞 engineersmnky 11/9/2023
目前尚不清楚它如何相关,但推断表明这应该有效。OntarioSalesReceiptIceCreamIceCream.joins(:ontario_sales_reciepts).produced_this_or_previous_month.where(low_fat: true, expired: false).sum(:number_of_buckets) * BUCKET_PRICE
0赞 daveasdf_2 11/9/2023
我很欣赏,两者。@LesNightingill,这给了我一个数组数组,我将其相加,给了我一个数组,我将其相加,给了我正确数量的桶,然后我可以执行其余的计算。工程师ksmnky,知道了,谢谢,第一次看到收集和加入,现在将研究两者

答:

0赞 Kinley Wangchuk 11/10/2023 #1
included_ice_cream = IceCream.produced_this_or_previous_month.where(
      low_fat: true,
      expired: false
    )
    total_amount = final_amount(included_ice_cream)

    def final_amount(included_ice_cream)
      included_ice_cream.map do |ice_cream|
        ice_cream.ontario_sales_receipts.pluck(:number_of_buckets).sum *
          BUCKET_PRICE
      end.sum
    end

这个怎么样?