我正在构建一个类似CMS的应用程序,其中User
has_many Report
属于Account
。 Deadline
和User
之间还有一个Account
模型。
我现在正在创建一个信息中心,我想在其中显示用户在过去几天内创建报告的帐户的概述。更复杂的是,我还想显示用户有截止日期的帐户。
我的第一种方法是在User模型上创建一个实例方法:
def recent_accounts
# find the accounts which where reported on the last 24 hours
accounts = reports.where('date > ?', 24.hours.ago).select(:account_id).map(&:account_id).uniq
dl = user_deadlines.all.select(:account_id).map(&:account_id).uniq
Account.includes(:past_deadlines, :deadlines).find((accounts+dl).compact)
end
虽然这有效,但感觉这不是正确的做法。由于这是关于帐户的,我想我应该将其重构为帐户模型。这是正确的假设吗?
我正在考虑为此创建一个条件范围,但我正在努力如何同时从报告关系和截止日期关系中提取信息。
我读过有关使用merge
和joins
的内容,但无法真正概念化解决方案。非常感谢任何帮助。
答案 0 :(得分:0)
进行非标准化。在last_report_created_at
上保留deadline
和Account
标记。或者某个帐户是否有多个用户的截止日期?
与性能提升相比,保持这些值的更新并不难。