Rails 4 -关联计数大于属性的查询



我想做一些像"查找所有book.pages.count <books.max_pages"。>

所以模型是:

class Book
  has_many :pages
end
class Page
  belongs_to :book
end

我知道我可以找到有固定页数的书。如:

# Get books w/ < 5 pages.
Book.joins(:pages).group("books.id").having("count(pages.id) < ?", 5)

是否有一个好的方法来做到这一点与动态页面计数?如:

Book.joins(:pages).group("books.id").select(.having("count(pages.id) <= book.max_pages")

如果不是,我总是可以在Book模型中存储一些东西(例如book.is_full = false,直到保存导致它满了),但如果max_pages得到更新,这就不那么灵活了。

你可以这样创建一个作用域:

def self.page_count_under(amount)
  joins(:pages)
    .group('books.id')
    .having('COUNT(pages.id) < ?', amount)
end

如果max_pagesBook模型的一个属性,这应该工作。

def self.page_count_under_max
  joins(:pages)
    .group('books.id')
    .having('COUNT(pages.id) < books.max_pages')
end

使用counter_cache!

http://guides.rubyonrails.org/association_basics.html 4.1.2.3:counter_cache

相关内容

最新更新