加入has_many:通过属性

时间:2015-02-10 12:38:31

标签: mysql ruby ruby-on-rails-4 activerecord

我有一个非常简单的数据库模型集,通过链接表与多对多类型关联。

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

有关我出错的地方或我需要查看的内容的任何建议吗?

1 个答案:

答案 0 :(得分: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 }