Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Activerecord rails:如何构建活动关系作用域以遍历多个表?_Activerecord_Ruby On Rails 3_Arel - Fatal编程技术网

Activerecord rails:如何构建活动关系作用域以遍历多个表?

Activerecord rails:如何构建活动关系作用域以遍历多个表?,activerecord,ruby-on-rails-3,arel,Activerecord,Ruby On Rails 3,Arel,我有以下表格和关系: user has_many projects project has_many tasks task has_many actions 我想构建一个范围,允许我选择所有当前用户操作,而不管他们属于哪个项目或任务 谢谢如果您使用该插件,我认为不需要使用作用域 class用户:项目 有许多:操作,:到=>:任务 终止 类项目:任务 终止 User.first.actions 我发现了一些有效的方法 在操作模型中: def self.owned_by (user) jo

我有以下表格和关系:

user has_many projects
project has_many tasks
task has_many actions
我想构建一个范围,允许我选择所有当前用户操作,而不管他们属于哪个项目或任务


谢谢

如果您使用该插件,我认为不需要使用作用域

class用户:项目
有许多:操作,:到=>:任务
终止
类项目:任务
终止
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 })

谢谢你。我试过了,但不太管用。有一个用户有两个项目,共有80个任务,当我请求user.actions时,这些任务总共有500个操作。它返回任务,user.actions.count为80。谢谢Bryan-我将查看该插件
 Action.joins(:task => [{:project => :user }]).where(:projects => {:user_id =>  user.id })