2017-03-07 31 views
0

是真实的,我有以下的Ruby条件:检查多个条件在Ruby中

<% if can? :read, %w(policy journey crash user).map(&:to_sym) %> 

,我要翻译成:如果用户有权限读取的阵列中任何资源。

但是它总是返回false。我该如何解决它?

我不想做的事:

if can? :read, :policy || can? :read, :journey || etc... 
+0

我不认为我们可以在不知道'can?'方法看起来像什么的情况下回答你... – Anthony

+0

@Anthony https://github.com/CanCanCommunity/cancancan/blob/develop/lib/cancan/ability .rb#L62 – Cameron

+1

'%w(策略旅程崩溃用户).map(&:to_sym)'会更好,因为'%i(策略旅程崩溃用户)'在更新的Rubies中。 –

回答

1

当然可以。

Enumerable#any?正是你要寻找的:

<% if %i(policy journey crash user).any? { |action| can? :read, action } %> 

以上将返回true只有can read any action

请注意,我用%i而不是%w。它给你数组如果符号。

+0

似乎OP想看到'any?'而不是'all?',但不想写'can? :阅读,:政策||能够? :阅读,:旅程||等等......因为它不是干的。 – Ilya

+0

@Ilya很好,thx!编辑 –