在rails中获取关联的最后一个值

时间:2013-08-08 16:18:40

标签: sql ruby-on-rails ruby activerecord

模型Price有一个属性数据,所以

Price.pluck(:data)

结果类似于[3.99,4.55,5.44]

而Price属于供应商

所以我想为每个供应商选择最优惠的价格,比如

Vendor.all.pluck(prices.order("data ASC").first.data)

如何在此方案中为每个供应商提取最低价格数据元素?提前感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

对于每个供应商,请对其关联价格使用minimum(:data)

Vendor.includes(:prices).map { |v| v.prices.minimum(:data) }

答案 1 :(得分:2)

这是另一种方法,它将更多的工作放在数据库而不是Ruby上。 (我很确定@meagar的答案中的代码会在地图中为每个供应商发出一个选择)。哪种方式更好(更快)可能取决于你的桌子有多大......

你可以这样做,它会发出一个SQL语句:

Vendor.select('min(prices.data) as min_price').from('vendors').joins('INNER join prices on vendors.id = prices.vendor_id').group('vendors.id')map {|v| v.min_price}

答案 2 :(得分:0)

您无法获得涉及供应商模型的任何信息 - 您需要了解的有关供应商的所有内容已经在Price模型中作为vendor_id,对吧?

所以你需要的只是:

Price.order(:data).group(:vendor_id).pluck(:data)