如何对两种不同的模型使用Pundit策略?

我有三个模型。

用户

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'

我该如何解决这个问题?

q709179630 回答:如何对两种不同的模型使用Pundit策略?

我找到了解决方法。

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
,

用户has_many :projects-它为用户实例提供了project_ids方法。只需使用它即可:

scope.where(project_id: @user.project_ids)
本文链接:https://www.f2er.com/3121089.html

大家都在问