我如何解决:PostsController#create中的Pundit :: NotDefinedError?

问题描述 投票:-1回答:1

无法为NilClassPolicy找到策略nil的错误

这是每次运行程序后的警告,我想在这里管理创建project_user的权限,并隐藏加号按钮以创建project_user

role.rb:

def is_manager?
  name == "Manager"
end

user.rb:

def is_manager_in_project? project_id
  project_users.find_by(project_id: project_id).role.is_manager?
end

projectUserPolicy:

def create_multiple?
 user.is_manager_in_project?(record.project_id)
end

project_user_controller:

class ProjectUsersController < ApplicationController
  before_action :load_project
  before_action -> { authorize @project_user }, only: :create_multiple

  def create_multiple
    authorize @project_user
    service = AddMembersService.new(params[:ids], params[:project_id]).perform
    if service.success?
      flash[:success] = service.message
    else
      flash[:danger] = service.message
    end
    redirect_to project_path(@project)
  end
end

结束视图:

项目/show.html.slim

- if policy(@project_user).create_multiple?

project.rbhas_many :project_users

project_user.rbbelongs_to :project

谢谢大家。如果有更多信息,请告诉我。

ruby-on-rails ruby slim pundit
1个回答
0
投票
当调用authorize方法时,Pundit推断策略类使用对象的类来运行。

这里要查找NillPolicy,这意味着授权对象为nil。查看您的代码,@project_user未实例化。

您应该添加before_action以获取或创建它。

© www.soinside.com 2019 - 2024. All rights reserved.