是真實的,我有以下的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中。 –