Ruby on Rails教程Michael Hartl第9章(代码清单9.43)

时间:2013-11-27 04:42:55

标签: ruby-on-rails-4 railstutorial.org ruby-2.0

我正在关注Michael Hartl的Ruby on Rails教程。我已经达到了第9章。有些代码我不明白。请参阅下面的第4行,为什么我们需要在!前面current_user?(user)才能使!current_user?(user)我们不需要true && true来传递if语句管理员可以看到删除操作。

如果用户已登录且是管理员,则current_user.admin? == truecurrent_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

提前致谢。

1 个答案:

答案 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没有删除链接,但其他人都没有。