0
我正在一個網站,允許用戶登錄。所有用戶都有一個帳戶,一個帳戶可以有很多訂單。用戶可能是客戶,工作人員或經理。客戶從來不是工人,也不是經理。經理也是一名工人。我想根據用戶的登錄類型提供其他頁面/導航選項部分。布爾與主場迎戰國旗
當前我正在使用一組布爾值來標記用戶爲特定類型,測試該值並運行通過一些if/elsif塊來生成用戶看到的頁面。
class User
include DataMapper::Resource
# ...
# various properties
# ...
property :client, Boolean
property :worker, Boolean
property :manager, Boolean
end
然後我使用一個before過濾器來測試用戶類型並將結果設置爲變量。
before do
@user = session[:user]
if @user.client?
@ura = 'client'
elsif @user.worker?
@ura = 'worker'
elseif @user.manager?
@ura = 'manager'
end
end
然後在我的意見中,我有@ura玩弄。在我看來,這已經會給管理者帶來問題,因爲@ura必須是工作人員&經理。我可以在我的意見中使用一些或者,但我認爲更好的解決方案是將用戶類型設置爲Enum或Flag。但我真的不明白如何在我的過程中使用它。
我想知道它們各自的優缺點&這是一個基本的例子,我可以在@ura中找到合適的值。
那有點兒類似於我在想什麼。看起來,使用'property:role',Enum [:client,:worker,:manager]'這樣的東西基本上可以讓我在一行中描述你的內容。我的理解是,某個事物只能一次枚舉Enum。 _(即''user.role =:worker'將會覆蓋:role的當前值)_而'Flag'可以將任何定義的值作爲一個屬性。我得到'Enum',但我不明白'Flag'的關係(例如,如何設置和取消設置'Flag'的特定值?*(可以在設置後取消設置?)*)_ –
理想情況下,我希望能夠擁有'.client?'之類的東西,並且返回'true'或'false'。所以我可以做一些類似'if @ ura.client?'的事情。 _(我自己搞清楚代碼是否正確,我只是試圖找到表示這些信息的最佳方式。)_ –