默认情况下,CanCan 将:read、:create 等映射到相关的控制器操作,例如:
def default_alias_actions
{
:read => [:index, :show],
:create => [:new],
:update => [:edit],
}
end
但是,当然,您不仅限于在控制器中拥有这些动作,最终控制器动作可以有任何名称。出于同样的原因,您不仅限于在 CanCan 中拥有 :read, :create, :update, :detroy。您可以将任何符号别名到任何控制器操作。假设您在控制器上有一个名为 do_cool_things 的操作,然后您可以将任何符号别名到该操作以供 CanCan 使用,例如:
alias_action :do_cool_things, :to => :coolify
然后你就可以这样做了:
can :coolify, Neighborhood
这意味着当前用户可以访问NeighborhoodsController 的:do_cool_things 方法。但是,如果您使用了:manage,则不需要定义此单独的操作,因为:manage 是一个包罗万象的功能。所以如果你做了:
can :manage, Neighborhood
当前用户仍然可以访问控制器的:do_cool_things 方法。
所以,:manage 可以让您做任何事情,但 :read, :create, :update and :destroy 只是您可以定义并映射到您选择的任何控制器操作的无数 CanCan 操作中的 4 个。