查询具有2级深层嵌套关系的记录

时间:2014-04-29 17:53:02

标签: ruby-on-rails activerecord ruby-on-rails-4

我有4个模型[Project,Task,TaskAssignment,User]与此关系:

  • 任务n:m用户through TaskAssignment
  • 项目hasMany任务

现在我想获得所有具有分配给特定用户的任务的项目。

我的尝试:

Project
    .includes(:tasks, {:task_assignments => [:tasks, :task_assignments]})
    .where("task_assignments.user_id = #{user_id}")
    .references(:tasks) 

引发ActiveRecord::ConfigurationError (Association named 'task_assignment' was not found on Project; perhaps you misspelled it?)

2 个答案:

答案 0 :(得分:0)

你应该使用联接,不管怎样,task_assignments属于任务。尝试这样做。

答案 1 :(得分:0)

我明白了:

首先,将此关系添加到项目模型中:

has_many :task_assignments, through: :tasks

然后使用此查询:

Project.includes(:task_assignments).where("task_assignments.user_id = #{user_id}").references(:task_assignments)