2015-02-10 2 views
0

У меня есть то, что я, однако, должен быть очень простым набором моделей баз данных с ассоциацией типа «много-ко многим» через таблицу компоновщиков.Присоединиться к has_many: через атрибуты

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') 

Любые предложения о том, где я неправильно или что мне нужно взглянуть на?

+0

ваш класс продукта имеет «HAS_MANY: продукты, через: store_products», которые должны быть «has_many: магазины, через: store_products» –

ответ

0

Если ваш запрос работает нормально, вы можете получить доступ к store_product_price. Чтобы увидеть его, просто попробуйте это:

Product.joins(:store_products) 
     .select('products.*, MIN(store_products.price) AS store_product_price') 
     .each { |p| puts p.store_product_price } 
+0

Я не могу поверить, что был ответ. Спасибо чувак. Поэтому я попытался сделать « .first.store_product_price'. Работает в обаянии. Хорошо иметь свежие глаза – tomasbasham

Смежные вопросы