我已在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中的错误。
答案 0 :(得分:0)
您是否尝试过使用inherited_resources提供的resource
方法?
member_action :dance do
resource.update_attributes! is_dancing: true
redirect_to collection_path
end