调用a:范围方法,用于has_many关联的总和

时间:2014-08-07 14:22:30

标签: ruby-on-rails associations

我有一些模特课。

class User < ActiveRecord::Base
  has_many :products
  ...
end

class Product < ActiveRecord::Base
  scope :free, -> {where('price == ?', 0)}
end

规范用法

free_products = user.products.free

但我想要以下行为:

users = User.where(...)
all_free_products = users.flat_map(&:products).free

我想将范围方法应用于has_many关联的总和。正如所料,它引发了以下错误

NoMethodError: undefined method `free' for #<Array:0x00123456abcdef>

是否有一种简单的方法可以为scope的{​​{1}}结果定义所有Array方法?

1 个答案:

答案 0 :(得分:2)

在产品模型中声明belongs_to :user关联,以便您可以使用merge

class Product < ActiveRecord::Base
  belongs_to :user

  scope :free, -> { where(price: 0) }
end

users = User.where(...)
products = Project.joins(:user).merge(users).free