1

私はこれらのテーブルと関係を持っています:

user has_many projects
project has_many tasks
task has_many actions

所属するプロジェクトやタスクに関係なく、現在のすべてのユーザーアクションを選択できるスコープを構築したいと思います。

ありがとう

4

2 に答える 2

0

nested_has_many_throughプラグインを使用する場合、これにはスコープは必要ないと思います。

class User < ActiveRecord::Base

  has_many :projects
  has_many :tasks, :through => :projects
  has_many :actions, :through => :tasks

end

class Project < ActiveRecord::Base

  has_many :tasks
  has_many :actions, :through => :tasks

end

User.first.actions
于 2010-06-13T16:52:21.990 に答える
0

うまくいくものを見つけました。

アクションモデルの場合:

def self.owned_by (user)
    joins("join tasks on actions.task_id = tasks.id").
    joins("join projects on tasks.list_id = projects.id").
    where("projects.user_id = ?" , user.id)
end

コンソールから:

u=User.find(1)
Action.owned_by(u).count

 => 521 # which is correct

私はSQLに少し慣れていないので、それを行うための最良の方法であるかどうかは確信しています。もっと簡潔にできると思います。

少し良く編集

 Action.joins(:task => [{:project => :user }]).where(:projects => {:user_id =>  user.id })
于 2010-06-26T13:06:03.197 に答える