CanCan load_resource在ActiveAdmin中将@model设置为nil

时间:2014-01-23 10:01:35

标签: ruby-on-rails activeadmin cancan

我已在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中的错误。

1 个答案:

答案 0 :(得分:0)

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

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