我有一些模特课。
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
方法?
答案 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