【问题标题】:Rails_admin and pundit: undefined method `policy' for #<RailsAdmin::MainControllerRails_admin 和权威人士:#<RailsAdmin::MainController 的未定义方法“策略”
【发布时间】:2016-11-02 10:14:50
【问题描述】:

我在 rails 5 上,我正在尝试使用权威人士为我的 rails_admin 面板实施授权。所以我在我的应用程序控制器中包含了 pundit 并安装了the rails_admin_pundit gem,正如你在我的 Gemfile 的这个 sn-p 中看到的那样:

gem 'devise'
gem 'devise-i18n'
gem 'rails_admin', '~> 1.0'
gem 'rails_admin-i18n'
gem 'rails_admin_tag_list', github: 'kryzhovnik/rails_admin_tag_list'
gem 'pundit'
gem "rails_admin_pundit", :github => "sudosu/rails_admin_pundit"

申请政策:

class ApplicationPolicy
  attr_reader :current_user, :record

  def initialize(current_user, record)
    @user = current_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 rails_admin?(action)
        case action
        when :dashboard
            @user.admin?
        when :index
            @user.admin?
        when :show
            @user.admin?
        when :new
            @user.admin?
        when :edit
            @user.admin?
        when :destroy
            @user.admin?
        when :export
            @user.admin?
        when :history
            @user.admin?
        when :show_in_app
            @user.admin?
        else
            raise ::Pundit::NotDefinedError, "unable to find policy #{action} for #{record}."
        end
    end

end

还有一个我的 rails_admin 初始化程序的 sn-p:

RailsAdmin.config do |config|
  config.authorize_with :pundit
  config.current_user_method(&:current_user)
  ...
end

所以现在当我加载管理仪表板(url:“/admin”)时,我收到了这个错误:

#RailsAdmin::MainController:0x0055914e2523a0 的未定义方法“策略”>

我按照所有说明进行操作,但仍然看不到缺少什么。任何答案/建议将不胜感激。

【问题讨论】:

    标签: ruby-on-rails rails-admin pundit


    【解决方案1】:

    这也困扰着我。最终找到:https://travis-ci.org/sferik/rails_admin/jobs/152180750

    rails_admin 现在默认为::ActionController::Base

    要修复,请将以下内容放入 rails_admin.rb:

    config.parent_controller = '::ApplicationController'

    【讨论】:

    • 不错的答案。为我工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多