0

编辑:我正在使用 Mongoid,所以没有链接也没有has_many through:

我正在为项目管理开发一个后端,并且我有“深度”相关的模型

class Project
  include Mongoid::Document
  has_many :steps
  scope :active, ...

class Step
  has_many :assignments

class Assignment
  belongs_to :contractor, inverse_of: :project_assignment
  belongs_to :step

class Contractor
  belongs_to :user, inverse_of: :contractor_profile
  has_many :project_assignments, class_name: 'Assignment'

class User
  has_one :contractor_profile, class_name: 'Contractor'

现在,我为我的用户编写了一个侧边栏。在此侧边栏中,如果用户有承包商资料,我想显示活动项目的数量

实现对这些信息的访问的最佳方式是什么?

我们一次可能会讨论多达 30 个活动项目,每个项目有 1 到 6 个任务(但许多步骤与相同的承包商),并且承包商通常总共有几个项目(活动或不活动)。

我的想法:

  • 查看current_contractor作业 -> 步骤 -> 项目 -> 计算活动的
  • 查看活动项目 -> 任务 -> 查找匹配的承包商current_contractor
  • 也许在每个作业中添加一个belong_to :project(我怎样才能确保它与self.step.project?)能够跳转到 Contractor -> assignments -> projects & count
4

1 回答 1

-2

不确定您是如何直接使用演示者或视图,但从模型的角度来看,您应该能够链接 activerecord 关联(听起来您已经想到了)。例如

current_contractor.assignment.steps.projects.where(:status=>'active').count

您可以通过在 Projects 模型中创建活动/非活动范围来稍微改进一下,这样就可以了

current_contractor.assignment.steps.projects.active.count

如果这种类型的查询可能很常见,我会考虑创建一个嵌套的 has_many_through 关系以从承包商到项目,例如在承包商定义中:

has_many :steps, 
       :through => :assignments
has_many :projects, :through => :steps

然后你可以做

contractor.projects.count

或者如果您创建了项目活动/非活动范围

contractor.projects.active.count

希望有帮助

于 2015-04-30T02:13:06.143 回答