在rails_admin中获取登录的用户关联记录

时间:2017-03-26 14:32:16

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

我已经安装了rails_admin gem而没有任何错误,其显示模型也是如此,但我要求我需要显示current_user登录相关数据

  

例如,用户有很多书籍,所以在rails admin我只想要那本用户手册,但目前它显示所有用户书籍,这是rails_admin的默认行为

我还尝试使用cancancan gem来实现相同的功能,但是我的rails_admin初始化程序配置不能正常工作

rails_admin.rb
RailsAdmin.config do |config|
  ### Popular gems integration
  ## == Devise ==
   config.authenticate_with do
    warden.authenticate! scope: :user
   end
   config.current_user_method(&:current_user)
   config.parent_controller = 'ApplicationController'
  ## == Cancan ==
  config.authorize_with :cancan,UserAbility
  ## == Pundit ==
  # config.authorize_with :pundit
  config.included_models = ["Book","User"]
  config.actions do
    dashboard                     # mandatory
    index                         # mandatory
    new
    export
    bulk_delete
    show
    edit
    delete
    show_in_app
  end
end

UserAbility Class实现如下

  class UserAbility
  include CanCan::Ability

  def initialize(user)
    # Define abilities for the passed in user here. For example:
       if user.present?
         can :access, :dashboard
         can :manage, :Book,id:user.id
       end
  end
end

2 个答案:

答案 0 :(得分:3)

而不是can :manage, :Book,id:user.id,请尝试使用:

can :read, Book, user_id: user.id

所以这些能力一起看起来像:

can :access, :rails_admin
can :dashboard
can :read, Book, user_id: user.id

答案 1 :(得分:2)

我认为你误解了Rails Admin的范围。从本质上讲,它是数据库的快照,适用于更多管理操作,例如查询数据库中的特定内容。

您唯一可以做的就是查找给定用户的所有Book,默认值为 all 所有用户的图书。显示内容中存在过滤器,可以根据用户的特定凭据(例如用户名,电子邮件或ID)缩小范围。

对于概念性检查,Rails Admin中的用户不会被视为或被视为与应用程序中的用户相同。相反,可以考虑使用Rails Admin来检查数据库中的数据,而不是显示特定的,经过身份验证的人员的数据。

正如您所描述的,更合适的Rails方法是为这些数据创建控制器和路由,并简单地使用current_user.books获取当前用户的所有书籍。