用于Product:Class

问题描述

我是不熟悉ruby-on-rails的人,我正在寻找一种方法,让我的rails_admin仪表板只能由超级管理员用户访问。我发现rails_admin gem与另一个gem完全兼容:cancancan,用于管理授权。

我遵循了本指南:https://github.com/sferik/rails_admin/wiki/Cancancan来正确配置rails_admin,结果是:

config / initializers / 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

app / models / ability.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的类。

导航到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上被告知,不使用活动记录需要模型适配器。

我在MacOS 11.15.6和:

上使用
  • 导轨6.0.2
  • Rails_admin 2.0.2
  • Cancancan 3.0.2
  • Mongoid 7.0.5

有人可以帮助我了解我在做什么错吗? 谢谢:)

解决方法

好吧,我明白了!

我通过以下步骤解决了问题:

  • 首先,如果当前正在运行,请停止rails server

  • 安装cancancan-mongoid gem。在cancancan gem的现有声明下,只需在您的Gemfile中键入gem 'cancancan-mongoid'。然后运行bundle install。 我提到了此页面:https://github.com/CanCanCommunity/cancancan-mongoid

  • 检查Gemfile中的宝石顺序如下:

mongoid
cancancan
cancancan-mongoid
rails_admin

前三个步骤应该可以解决问题,但是如果问题仍然存在,请继续执行最后一步:

这对我有用! :)