2013-08-08 2 views
2

Модели Цена имеет данные в формате атрибуты, такЛивер последнего значения ассоциации в рельсах

Price.pluck(:data) 

результатов в чем-то вроде [3.99,4.55,5.44]

И цена принадлежит Продавцу

Поэтому я хочу, чтобы выбрать лучшую цену для каждого поставщика, что-то вроде

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

Как я могу идти о е xtracting элемент данных с самой низкой ценой для каждого поставщика в этом сценарии? Заранее спасибо за помощь.

+0

Вы используете MySQL? – PinnyM

ответ

3

Для каждого поставщика, используйте minimum(:data) на связанные с ним цены:

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

Отлично. Большое спасибо. Мне нужно улучшить свое понимание команды карты в целом. – spitfire109

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} 
0

Вы не получаете ничего от получения Модель поставщика - все, что вам нужно знать о продавце, уже находится в модели Price как vendor_id, не так ли?

Так все, что вам нужно:

Price.order(:data).group(:vendor_id).pluck(:data) 
Смежные вопросы