cancan能力定义语法 - 是否有更短的版本?

时间:2011-08-11 23:50:36

标签: ruby ruby-on-rails-3 cancan

我目前在ability.rb中有这样的东西:

if user.role? == "staff"
    can :update, Interp do |item|
        item.try(:user) == user
    end
    can :update, Invitation do |item|
        item.try(:user) == user
    end
end

实际上,每个角色的“更新”都有很多这样的陈述。下一个版本是否也能正常工作?

if user.role? == "staff"
    can :update, [Interp, Invitation] do |item|
        item.try(:user) == user
    end
end

有更短的路吗?

更新:此方法绝对有效,并且执行此操作的代码量最少。

1 个答案:

答案 0 :(得分:3)

应该工作。如果没有,你可以这样做:

if user.role? == "staff"
    [Interp, Invitation].each do |resource|
        can :update, resource do |item|
            item.try(:user) == user
        end
    end
end

但是,我认为cancan足够聪明,可以理解你在这种情况下要做的事情。但是从未尝试过。