是真实的,我有以下的Ruby条件:检查多个条件在Ruby中
<% if can? :read, %w(policy journey crash user).map(&:to_sym) %>
,我要翻译成:如果用户有权限读取的阵列中任何资源。
但是它总是返回false。我该如何解决它?
我不想做的事:
if can? :read, :policy || can? :read, :journey || etc...
是真实的,我有以下的Ruby条件:检查多个条件在Ruby中
<% if can? :read, %w(policy journey crash user).map(&:to_sym) %>
,我要翻译成:如果用户有权限读取的阵列中任何资源。
但是它总是返回false。我该如何解决它?
我不想做的事:
if can? :read, :policy || can? :read, :journey || etc...
当然可以。
Enumerable#any?
正是你要寻找的:
<% if %i(policy journey crash user).any? { |action| can? :read, action } %>
以上将返回true
只有can read any action
。
请注意,我用%i
而不是%w
。它给你数组如果符号。
似乎OP想看到'any?'而不是'all?',但不想写'can? :阅读,:政策||能够? :阅读,:旅程||等等......因为它不是干的。 – Ilya
@Ilya很好,thx!编辑 –
我不认为我们可以在不知道'can?'方法看起来像什么的情况下回答你... – Anthony
@Anthony https://github.com/CanCanCommunity/cancancan/blob/develop/lib/cancan/ability .rb#L62 – Cameron
'%w(策略旅程崩溃用户).map(&:to_sym)'会更好,因为'%i(策略旅程崩溃用户)'在更新的Rubies中。 –