首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails教程,Michael,第9章(清单9.43)

Rails教程,Michael,第9章(清单9.43)
EN

Stack Overflow用户
提问于 2013-11-27 04:42:54
回答 1查看 347关注 0票数 1

我正在学习Michael的Rails教程。我已经到了第九章,有些代码我不明白。请参见下面的第4行,为什么我们需要在current_user?(user)前面使用一个current_user?(user)来使其成为!current_user?(user)--我们不需要true && true来传递if语句,以便Admin可以看到删除操作。

如果用户登录并是管理员,则current_user.admin? == truecurrent_user?(user) = true!current_user?(user)将为false,If语句不会通过。

_user.html.erb

代码语言:javascript
运行
复制
<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

代码语言:javascript
运行
复制
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

预先谢谢.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-27 04:50:25

只有管理员才能删除用户,而不能删除自己。

来自railstutorial.org第9.4章:

管理用户应该看到这样的链接,通过单击delete链接,我们期望管理员删除用户。

还请注意,我们添加了一个测试,以验证管理员没有看到要删除自己的链接。

所以:

current_user.admin?的意思是“当前用户是管理员吗?”

!current_user?(user)的意思是“当前用户与我显示的用户不同吗?”

总之,<% if current_user.admin? && !current_user?(user) %>作为显示Delete链接的测试,意味着删除链接只显示给管理员,而不显示他们自己的user详细信息。也就是说,只有管理员才能删除用户,而不能删除自己。

请记住,用户视图显示的是用户列表,而不仅仅是当前用户。在这个上下文中,user是指视图当时显示的用户模型。

检查这幅图像,注意Example User没有删除链接,但其他人都有。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20234075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档