2013-11-27 175 views
1

我正在關注Ruby on Rails教程Michael Hartl。我已經到了第9章。有些代碼我不明白。請參閱下面的第4行,爲什麼我們需要在current_user?(user)之前需要!來製作它!current_user?(user)我們不需要true && true if語句通過,所以Admin可以看到刪除操作。Ruby on Rails教程Michael Hartl第9章(代碼9.43)

如果用戶登錄並且是管理員,則current_user.admin? == true,current_user?(user) = true!current_user?(user)將爲false,if語句將不會通過。

_user.html.erb

<li> 
<%= gravatar_for user, size: 52 %> 
<%= link_to user.name, user %> 
<% if current_user.admin? && !current_user?(user) %> 
| <%= link_to "delete", user, method: :delete,data: { confirm: "You sure?" } %> 
<% end %> 
</li> 

sessions_helper.rb

def current_user=(user) 
    @current_user = user 
end 

def current_user 
    remember_token = User.encrypt(cookies[:remember_token]) 
    @current_user ||= User.find_by(remember_token: remember_token) 
end 

def current_user?(user) 
    user == current_user 
end 

在此先感謝。

回答

2

只有管理員可以刪除用戶,他們不能刪除自己。

railstutorial.org章9.4:

管理用戶應該看到這樣的鏈接,並通過點擊刪除鏈接,我們希望管理員刪除用戶

還要注意,我們添加了一個測試來驗證管理員沒有看到自己刪除的鏈接

所以:

current_user.admin?意味着 「是當前用戶的管理員嗎?」

!current_user?(user)意思是「當前用戶與我顯示的用戶不同嗎?」

放在一起,<% if current_user.admin? && !current_user?(user) %>作爲顯示Delete鏈接的測試意味着刪除鏈接僅針對管理員顯示,而不顯示其自己的user詳細信息。也就是說,只有管理員可以刪除用戶,他們不能刪除自己。

請記住,用戶視圖正在顯示用戶列表,而不僅僅是當前用戶。在這種情況下,user意味着當時視圖正在顯示的用戶模型。

檢查this image並注意Example User沒有刪除鏈接,但其他人都這樣做。

+0

你能解釋一下這個代碼如果是current_user.admin,那麼'<%? &&!current_user?(user)%>'=只有管理員可以刪除用戶,他們不能刪除自己。謝謝 – Jimmy

+0

cos'true && true => true'和'true && false => false',如果管理員看到'true && false',管理員如何看到刪除操作? – Jimmy

+0

更新的答案與進一步的解釋 –

相關問題