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

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

Price.pluck(:data) 

结果像[3.99,4.55,5.44]

而Price属于Vendor

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

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

在这种情况下,如何为每个供应商提取最低价格数据元素? 提前感谢您的帮助。

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

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

这是另一种方法,它将更多的工作放在数据库上而不是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} 

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

所以你需要的是:

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