Присоединяйтесь has_many: через атрибуты

0

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

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
    у вашего класса Product есть 'has_many: products, through: store_products', который должен быть 'has_many: Stores, through: store_products'
Теги:
activerecord
ruby-on-rails-4

1 ответ

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
    Я не могу поверить, что это был ответ. Спасибо чувак. Поэтому я попытался выполнить <query>.first.store_product_price . Работает шарм. Хорошо иметь свежие глаза

Ещё вопросы

Сообщество Overcoder
Наверх
Меню