我正在关注Michael Hartl的Ruby on Rails教程。我已经达到了第9章。有些代码我不明白。请参阅下面的第4行,为什么我们需要在!
前面current_user?(user)
才能使!current_user?(user)
我们不需要true && true
来传递if语句管理员可以看到删除操作。
如果用户已登录且是管理员,则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
提前致谢。
答案 0 :(得分: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
没有删除链接,但其他人都没有。