2

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

Price.pluck(:data)

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

价格属于供应商

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

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

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

4

3 回答 3

3

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

Vendor.includes(:prices).map { |v| v.prices.minimum(:data) }
于 2013-08-08T16:23:26.890 回答
2

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

你可以这样做,它会发出一条 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}
于 2013-08-09T16:00:38.617 回答
0

您不会从参与 Vendor 模型中获得任何收益——您需要了解的有关 vendor 的所有信息都已在 Price 模型中作为 vendor_id 存在,对吗?

所以你只需要:

Price.order(:data).group(:vendor_id).pluck(:data)
于 2013-11-20T22:01:21.133 回答