2017-03-07 30 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!編輯 –