如果他們向我支付現金(管理員),我必須更改客戶表格。假設的現金,而不是真正的現金。因此,爲了改變形式,我已經使用了這樣的事情:我該如何檢查當前用戶是否是rails中的admin?
if current_user.user_type == :client
show normal form
elsif current_user.user_type == :admin
show normal form + more functionality
end
那麼,什麼是貫徹落實「USER_TYPE」功能的最佳方法是什麼?我正在考慮將該函數添加到User類,如下所示。退貨:賣家和退貨:客戶正常工作。我已經測試過了。我可以檢查當前用戶的電子郵件和密碼嗎(current_user是我的密碼和電子郵件)?這似乎並不奏效。最好的辦法是做什麼?
class User < ActiveRecord::Base
has_one :client
has_one :seller
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
acts_as_messageable
def user_type
return :client if self.client(&:info_complete?)
return :seller if self.seller(&:info_complete?)
return :admin if (self.email == '[email protected]' && self.password == 'admintestpass')
end
end
我過去所做的就是添加一列,以所謂的'role'或類似的東西用戶表,然後使它枚舉。 Rails枚舉很好用。 http://api.rubyonrails.org/v5.1.0/classes/ActiveRecord/Enum.html。我不願意認可你的解決方案的唯一原因是,如果確定角色的邏輯變得更加複雜,那麼存儲角色比每次計算角色更有意義。如果您希望我詳細說明枚舉解決方案的步驟,請告訴我 –
@ 0101001101000010是的,請!另外,我的方式會讓一切都變慢嗎?因爲它每次都會計算? – LizzyTheLearner
我認爲真正的懲罰會隨着可維護性而來,而不是那麼多的表現。現在你有一個非常簡單的方法來告訴誰是管理員,但是如果這個規則改變了,該怎麼辦?如果您創建另一個電子郵件爲「me @ random.hotmail.net」的管理員,該怎麼辦?你將不得不改變你的規則,如果最終你有幾十個管理員,那麼制定一條規則來管理他們將是一場噩夢。永久存儲用戶角色更容易。我通常創建一個管理員頁面,管理員可以更改用戶角色。另外,檢查用戶密碼通常不是一個好主意。 –