私はこれらのテーブルと関係を持っています:
user has_many projects
project has_many tasks
task has_many actions
所属するプロジェクトやタスクに関係なく、現在のすべてのユーザーアクションを選択できるスコープを構築したいと思います。
ありがとう
私はこれらのテーブルと関係を持っています:
user has_many projects
project has_many tasks
task has_many actions
所属するプロジェクトやタスクに関係なく、現在のすべてのユーザーアクションを選択できるスコープを構築したいと思います。
ありがとう
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
うまくいくものを見つけました。
アクションモデルの場合:
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 })