Pundit ::错误的参数数量(1表示0)

时间:2016-04-15 03:57:47

标签: ruby-on-rails-4 pundit

当我尝试通过权威授权并通过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

任何指针我为什么会收到此错误。一段时间以来一直在打破我的头脑。

1 个答案:

答案 0 :(得分:0)

找出问题所在。这是我的代码的问题。在authorize函数中,它引用了接受参数的Policy函数。

在我的application_controller.rb中,我有另一个不接受任何参数的策略函数,这导致了问题。将我的策略功能重命名为其他解决问题的方法。

有时候让问题重新入睡并在第二天醒来时重新开始。