提问人:daveasdf_2 提问时间:11/9/2023 更新时间:11/10/2023 访问量:32
如何通过has_many关联循环访问 ActiveRecord 关系
How to iterate over ActiveRecord relation through a has_many association
问:
所以我有某些冰淇淋,我想在其中获得安大略省低脂冰淇淋和未过期冰淇淋的销售额。
冰淇淋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 ... )
答:
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
这个怎么样?
评论
final_amount = included_ice_cream.collect{|iic| iic.ontario_sales_receipts.pluck(:number_of_buckets) }
#ontario_sales_receipts
OntarioSalesReceipt
IceCream
IceCream.joins(:ontario_sales_reciepts).produced_this_or_previous_month.where(low_fat: true, expired: false).sum(:number_of_buckets) * BUCKET_PRICE