我想做类似“查找 book.pages.count < books.max_pages 的所有书籍”之类的操作。
所以模型是:
class Book
has_many :pages
end
class Page
belongs_to :book
end
Run Code Online (Sandbox Code Playgroud)
我知道我可以找到有固定页数的书。例如:
# Get books w/ < 5 pages.
Book.joins(:pages).group("books.id").having("count(pages.id) < ?", 5)
Run Code Online (Sandbox Code Playgroud)
有没有一种使用动态页数来做到这一点的好方法?例如:
Book.joins(:pages).group("books.id").select(.having("count(pages.id) <= book.max_pages")
Run Code Online (Sandbox Code Playgroud)
如果不是,我总是可以在 Book 模型中存储一些东西(例如,book.is_full = false直到保存导致它已满),但是如果 max_pages 更新,这会不太灵活。
您可以创建这样的范围:
def self.page_count_under(amount)
joins(:pages)
.group('books.id')
.having('COUNT(pages.id) < ?', amount)
end
Run Code Online (Sandbox Code Playgroud)
更新
如果max_pages是Book模型的属性,这应该有效。
def self.page_count_under_max
joins(:pages)
.group('books.id')
.having('COUNT(pages.id) < books.max_pages')
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3529 次 |
| 最近记录: |