我有两个型号:
Novel has_many :pages
Page belongs_to :novel
Run Code Online (Sandbox Code Playgroud)
我想根据页数列出流行的小说.从本质上讲,我希望从此查询的结果中加载Novel模型:
select p.novel_id, count(*) as count
from pages p
GROUP BY p.novel_id
ORDER BY count DESC
Run Code Online (Sandbox Code Playgroud)
我确信使用named_scope在Rails 2.3中有一些可爱的方法,但我无法让它工作.另外,如果它确实有效,它会变慢狗吗?
我已经考虑过将page_count保留在Novel上,但这似乎违反了某些事情(惯例,规范化,我的灵魂).
看起来像计数器缓存是要走的路.如果在小说表(带索引)上创建一个名为page_count的列,Rails将缓存Novel模型本身的页数,使这种查询非常容易和高效.
在named_scope对Novel模型就变成
class Novel < ActiveRecord::Base
named_scope :popular, :order => 'page_count desc'
end
class Page < ActiveRecord::Base
belongs_to :novel, :counter_cache => true
end
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请查看计数器缓存railscast
| 归档时间: |
|
| 查看次数: |
495 次 |
| 最近记录: |