当我尝试通过权威授权并通过Devise进行身份验证时,我收到此错误。
ArgumentError - wrong number of arguments (1 for 0):
pundit (1.1.0) lib/pundit.rb:194:in `authorize'
app/controllers/trips_controller.rb:23:in `new'
actionpack (4.2.5) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.2.5) lib/abstract_controller/base.rb:198:in `process_action'
我的application_controller.rb是
class ApplicationController < ActionController::Base
include Pundit
protect_from_forgery with: :exception
rescue_from Pundit::NotAuthorizedError, with: :permission_denied
....
end
有一个application_policy.rb,如下所示
class ApplicationPolicy
attr_reader :user, :record
def initialize(user, record)
@user = user
@record = record
end
def index?
false
end
def show?
scope.where(:id => record.id).exists?
end
def create?
false
end
def new?
create?
end
def update?
false
end
def edit?
update?
end
def destroy?
false
end
def scope
Pundit.policy_scope!(user, record.class)
end
class Scope
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def resolve
scope
end
end
end
我的trip_policy.rb
class TripPolicy < ApplicationPolicy
def new?
user.provider?
end
def create?
user.provider?
end
def update?
user.provider?
end
end
在我的trips_controller中我正在做这个
class TripsController < ApplicationController
before_action :authenticate_user!
after_action :verify_authorized, except: [:index, :new]
...
def new
@trip = Trip.new
authorize @trip
end
...
end
任何指针我为什么会收到此错误。一段时间以来一直在打破我的头脑。
答案 0 :(得分:0)
找出问题所在。这是我的代码的问题。在authorize函数中,它引用了接受参数的Policy函数。
在我的application_controller.rb中,我有另一个不接受任何参数的策略函数,这导致了问题。将我的策略功能重命名为其他解决问题的方法。
有时候让问题重新入睡并在第二天醒来时重新开始。