如何使用来自多个相关模型的约束来处理模型查询

时间:2018-05-30 20:17:40

标签: ruby-on-rails

我正在构建一个类似CMS的应用程序,其中User has_many Report属于AccountDeadlineUser之间还有一个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

虽然这有效,但感觉这不是正确的做法。由于这是关于帐户的,我想我应该将其重构为帐户模型。这是正确的假设吗?

我正在考虑为此创建一个条件范围,但我正在努力如何同时从报告关系和截止日期关系中提取信息。

我读过有关使用mergejoins的内容,但无法真正概念化解决方案。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

进行非标准化。在last_report_created_at上保留deadlineAccount标记。或者某个帐户是否有多个用户的截止日期? 与性能提升相比,保持这些值的更新并不难。