2016-02-12 101 views
-2

關於我在下面用來確定角色的紅寶石。紅寶石只是角色代碼

if current_user.try(:admin?) or current_user.try(:superuser?) 

它可以簡化像(這個例子不工作)。

if current_user.try(:admin?||:superuser?) 

編輯:

我可以使用助手來簡化呢?像

has_role([:admin?,:superuser?]) 

我的用戶模型具有枚舉的角色

enum role: [:user, :admin, :superuser] 
+1

如果你有很多的角色,也許看像的RoleModel寶石來定義的角色,而不是設定布爾標誌。更容易說出如current_user.has_any_role?(:admin,:realm_admin,:system_admin) – Doon

+1

也許'current_user && [:admin ?,:superuser?]。any? {| role | current_user.send(role)}'? – spickermann

+1

在Ruby中''或'不等於'||'。除非明確需要,否則不應將其用於布爾邏輯。 – meagar

回答

1

你不能把它簡化這個樣子,因爲try方法,僅得到1說法。這是最簡單的方法。 :admin?||:superuser?在所有情況下返回:admin,因爲在Ruby中,如果||運算符的左參數爲true(不爲零),它將返回。 所以,在你的第二個實例,你總是會嘗試調用admin?方法上current_user

1 || false 
#=> 1 
1 || 2 
#=> 1 
:admin? || :current_user 
#=> :admin?