【问题标题】:CanCan load_resource setting @model to nil in ActiveAdminCanCan load_resource 在 ActiveAdmin 中将 @model 设置为 nil
【发布时间】:2014-02-13 19:18:02
【问题描述】:

我在 ActiveAdmin 中为我的一个模型/资源定义了一个自定义 member_action。主模型 Controller 调用 load_and_authorize_resource 并且 ActiveAdmin 正确执行我在我的能力文件中为该自定义 member_action 定义的授权。

但是,它不会在 member_action 定义中提供 @my_model 资源,正如我所期望的 https://github.com/ryanb/cancan/wiki/authorizing-controller-actions#choosing-actions... 它必须已加载以检查功能。那么为什么资源在我的操作中不可用?

我正在运行 Rails 3.2、CanCan 1.6.10 和 ActiveAdmin 0.6.0。这是我定义的代码:

/app/controllers/my_models_controller.rb

class MyModelsController < ApplicationController
  load_and_authorize_resource

  ...

end

/app/admin/my_models.rb

ActiveAdmin.register MyModel do
  member_action :dance do
    @my_model.is_dancing = true
    @my_model.save!
    redirect_to admin_my_models_path
end

/app/models/ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    if user and user.is_admin? 
      can :dance, MyModel
    end
  end
end

我可以通过显式加载实例来解决这个问题,但我想了解我是否遗漏了什么,或者它实际上是否是 CanCan + ActiveAdmin 中的错误。

【问题讨论】:

    标签: ruby-on-rails activeadmin cancan


    【解决方案1】:

    您是否尝试过使用inherited_resources 提供的resource 方法?

    member_action :dance do
      resource.update_attributes! is_dancing: true
      redirect_to collection_path
    end
    

    【讨论】:

    • resource 是我想要的,虽然我使用了显式设置器和save! 而不是update_attributes!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    相关资源
    最近更新 更多