У меня есть то, что я, пожалуй, очень простой набор моделей баз данных с ассоциацией типа "много-ко многим" через таблицу компоновщиков.
class Product < ActiveRecord::Base
has_many :store_products
has_many :stores, through: store_products
end
class StoreProduct < ActiveRecord::Base
belongs_to :store
belongs_to :product
validates :price, presence: true
end
class Store < ActiveRecord::Base
has_many :store_products
has_many :products, through: :store_product
end
Так много магазинов могут продавать много продуктов и каждый продавать их по разным ценам. Я искал способ перечислить все продукты вместе с их самой низкой ценой во всех магазинах, используя joins
. Мне не повезло с этим. Лучшее, что у меня было, - это сделать запрос, который возвратил луковицы за самую низкую цену продажи (я думаю), но атрибут цены не был включен в выход.
Запрос, который я использовал, состоял в следующем:
Product.joins(:store_products).select('products.*, MIN(store_products.price) AS store_product_price')
Любые предложения о том, где я ошибаюсь или что мне нужно взглянуть?
Если ваш запрос работает нормально, вы можете получить доступ к store_product_price
. Чтобы увидеть это, просто попробуйте следующее:
Product.joins(:store_products)
.select('products.*, MIN(store_products.price) AS store_product_price')
.each { |p| puts p.store_product_price }
<query>.first.store_product_price
. Работает шарм. Хорошо иметь свежие глаза