我有三个模型。
用户
has_many :projects
项目
has_many :users
网站
belongs_to :project
has_many :users
我还使用Active Admin和Pundit来管理我的项目和权限。如果网站的项目也是用户的项目,我需要控制用户访问网站对象。
由于这个原因,我准备了这样的代码;
scope.where("#{@record.project.id.in? Project.where(id: ProjectUser.where(user_id: @user.id).ids).ids}")
但它返回错误消息:
nil:NilClass的未定义方法'project'
我该如何解决这个问题?
答案 0 :(得分:1)
我找到了解决方法。
class Scope < Scope
def resolve
case @user.class.to_s
when 'AdminUser'
scope.all
when 'User'
project_user_array = ProjectUser.where(user_id: @user.id)
project_ids = project_user_array.map {|object| object[:project_id] }
scope.where(project_id: project_ids)
end
end
end
答案 1 :(得分:0)
用户has_many :projects
-它为用户实例提供了project_ids
方法。只需使用它即可:
scope.where(project_id: @user.project_ids)