我目前在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
有更短的路吗?
更新:此方法绝对有效,并且执行此操作的代码量最少。
答案 0 :(得分:3)
应该工作。如果没有,你可以这样做:
if user.role? == "staff"
[Interp, Invitation].each do |resource|
can :update, resource do |item|
item.try(:user) == user
end
end
end
但是,我认为cancan足够聪明,可以理解你在这种情况下要做的事情。但是从未尝试过。