Ruby on rails 4 Rails/Pundit ArgumentError(参数数目错误(2代表0))
一天来我一直在为这件事伤脑筋。我正在尝试为一个名为Design的模型实现一个权威策略(使用Design进行身份验证),该模型属于一个拥有许多设计的用户。create和new是否也应被排除在authorize after action之外?看来这应该行得通。非常感谢你的帮助 我经常碰到 ArgumentError(参数数目错误(2代表0)): 创建新设计时(调试器所在位置)。我认为它正在将一个有效的@设计传递给策略查找器。这可能是我在政策中设置范围的方式 以下是控制器的设计:Ruby on rails 4 Rails/Pundit ArgumentError(参数数目错误(2代表0)),ruby-on-rails-4,devise,pundit,Ruby On Rails 4,Devise,Pundit,一天来我一直在为这件事伤脑筋。我正在尝试为一个名为Design的模型实现一个权威策略(使用Design进行身份验证),该模型属于一个拥有许多设计的用户。create和new是否也应被排除在authorize after action之外?看来这应该行得通。非常感谢你的帮助 我经常碰到 ArgumentError(参数数目错误(2代表0)): 创建新设计时(调试器所在位置)。我认为它正在将一个有效的@设计传递给策略查找器。这可能是我在政策中设置范围的方式 以下是控制器的设计: class Desi
class DesignsController < ApplicationController
before_filter :authenticate_user!
before_action :set_design, only: [:show, :edit, :update, :destroy]
after_action :verify_authorized, except: [:index, :new]
# GET /designs
# GET /designs.json
def index
@designs = policy_scope(Design)
end
# GET /designs/1
# GET /designs/1.json
def show
end
# GET /designs/new
def new
@design = Design.new
end
# GET /designs/1/edit
def edit
end
# POST /designs
# POST /designs.json
def create
@design = Design.new(design_params)
@design.user_id = current_user.id
respond_to do |format|
if @design.save
format.html { redirect_to @design, notice: 'Design was successfully created.' }
format.json { render :show, status: :created, location: @design }
else
format.html { render :new }
format.json { render json: @design.errors, status: :unprocessable_entity }
end
end
debugger // This is where it throws the exception
authorize @design
end
# PATCH/PUT /designs/1
# PATCH/PUT /designs/1.json
def update
respond_to do |format|
if @design.update(design_params)
format.html { redirect_to @design, notice: 'Design was successfully updated.' }
format.json { render :show, status: :ok, location: @design }
else
format.html { render :edit }
format.json { render json: @design.errors, status: :unprocessable_entity }
end
end
end
# DELETE /designs/1
# DELETE /designs/1.json
def destroy
@design.destroy
respond_to do |format|
format.html { redirect_to designs_url, notice: 'Design was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_design
@design = Design.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def design_params
params.require(:design).permit(:name, :description, :design_model, :certification_for_distribution, :manufacturing_test)
end
end
类设计控制器
这是设计策略课
class DesignPolicy
class Scope<DesignPolicy
attr_reader :user, :scope
def initialize(user,scope)
@user = user
@scope = scope
end
def resolve
if user.admin?
@scope.all
else
@scope.all.where(user_id: user.id)
end
end
end
def index?
debugger
true
end
def new?
debugger
@current_user != nil
end
def create?
@current_user != nil
new?
end
end
类设计策略
类范围
该范围不应从DesignPolicy继承
您还需要设置DesignPolicy以具有初始化方法
如果让它们从ApplicationPolicy继承,则不需要在每个策略中设置initialize方法。权威文档非常好,我几乎每天都参考它。只要您了解Ruby中的类和继承,就应该没有问题。您找到了解决这个问题的方法吗?我也有同样的问题: