gpt4 book ai didi

ruby-on-rails - 根据 Rails 中的 has_many 关系计数选择流行模型

转载 作者:行者123 更新时间:2023-12-05 01:13:14 28 4
gpt4 key购买 nike

我有两个模型:

Novel has_many :pages
Page belongs_to :novel

我想根据页数列出热门小说。本质上,我希望从这个查询的结果中加载新模型:

select p.novel_id, count(*) as count
from pages p
GROUP BY p.novel_id
ORDER BY count DESC

我确信在 Rails 2.3 中使用 named_scope 有一些可爱的方法可以做到这一点,但我不能完全让它工作。另外,如果它确实有效,它会变得很慢吗?

我考虑过在 Novel 上保留 page_count,但这似乎违反了某些东西(惯例,规范化,我的灵魂)。

最佳答案

似乎计数器缓存是可行的方法。如果您在 novels 表(带有索引)上创建一个名为 page_count 的列,Rails 将缓存 Novel 模型本身的页数,使这种查询变得非常简单和高效。

然后 Novel 模型上的 named_scope 变成了

class Novel < ActiveRecord::Base
named_scope :popular, :order => 'page_count desc'
end

class Page < ActiveRecord::Base
belongs_to :novel, :counter_cache => true
end

有关更多详细信息,请查看 the counter cache railscast

关于ruby-on-rails - 根据 Rails 中的 has_many 关系计数选择流行模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719333/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com