我想返回带有作为范围一部分的图书的用户 -
class User < ActiveRecord::Base
has_many :books
end
class Book < ActiveRecord::Base
belongs_to :user
scope :published, -> { where (status: 'Published') }
end
所以
Book.published
返回所有已发布的图书。我试图定义拥有一本或多本出版图书的所有用户的范围。
知道
User.joins(:books).uniq.all
返回所有拥有图书的用户(来自Rails: How to get objects with at least one child?) - 我可以为其添加范围,还是有更好的方法?
答案 0 :(得分:2)
首先, 模型 的 类名称 应为 单数 如果我理解正确,您希望所有用户都拥有范围published
范围内的图书,那么我会将scope
放在User
模型中稍作修改,如下所示
class User < ActiveRecord::Base
has_many :books
scope :published, -> { joins(:books).where(books: { status: 'Published' }) }
end
现在,您可以User.published
返回所有用户的图书,其状态为 已发布