簡體   English   中英

rails_admin 和 cancancan 未定義方法 `accessible_by' 產品:Class

[英]rails_admin and cancancan undefined method `accessible_by' for Product:Class

我是 ruby-on-rails 的新手,我正在尋找一種方法讓我的 rails_admin 儀表板只能由超級管理員用戶訪問。 我發現 rails_admin gem 與另一個 gem 完全兼容:cancancan,用於管理授權。

我按照本指南: https://github.com/sferik/rails_admin/wiki/Cancancan正確配置 rails_admin,結果如下:

配置/初始化程序/rails_admin.rb

RailsAdmin.config do |config|
  # == Devise ==
  config.authenticate_with do
    warden.authenticate! scope: :user
  end
  config.current_user_method(&:current_user)

  # == CancanCan ==
  config.authorize_with :cancancan

  config.actions do
    dashboard                     # mandatory
    index                         # mandatory
    new
    export
    bulk_delete
    show
    edit
    delete
    show_in_app
  end
end

應用程序/模型/能力.rb

class Ability
  include CanCan::Ability
  def initialize(user)
    user ||= User.new
    can :read, :all

    if user.superadmin_role?
      can :access, :rails_admin
      can :read, :dashboard
      can :manage, :all
    elsif user.admin_role? 
      can :manage, :all
    end
  end
end

當我創建項目時,我跳過了活動記錄。 目前,我制作的唯一支架是一個名為 Product 的 class。

導航到 localhost:3000/admin 時,我不斷收到此錯誤:

NoMethodError in RailsAdmin::MainController#dashboard

undefined method `accessible_by' for Product:Class

我不知道在哪里以及如何定義這個“accessible_by”方法。 此外,我發現在此鏈接上https://github.com/CanCanCommunity/cancancan/wiki/Fetching-Records被告知不使用活動記錄需要 model 適配器。

我在 MacOS 11.15.6 上使用並且:

  • 導軌 6.0.2
  • Rails_admin 2.0.2
  • 康康康 3.0.2
  • Mongoid 7.0.5

有人可以幫我理解我做錯了什么嗎? 謝謝:)

好,我知道了!

我通過以下步驟解決了問題:

  • 首先:如果當前正在運行,請停止rails server

  • 安裝cancancan-mongoid gem。 只需在您的 Gemfile 中輸入gem 'cancancan-mongoid' ,在現有的 cancancan gem 聲明下。 然后運行bundle install 我參考了這個頁面: https://github.com/CanCanCommunity/cancancan-mongoid

  • 檢查 Gemfile 中 gem 的順序是否如下所示:

mongoid
cancancan
cancancan-mongoid
rails_admin

前三個步驟應該可以解決問題,但如果問題仍然存在,請繼續執行最后一步:

這對我有用::)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM