【问题标题】:Ruby on Rails Tutorial by Michael Hartl Chapter 9 (Listing 9.43)Michael Hartl 编写的 Ruby on Rails 教程第 9 章(清单 9.43)
【发布时间】:2013-11-27 04:42:54
【问题描述】:

我正在关注 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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    只有管理员可以删除用户,他们不能删除自己。

    来自railstutorial.org第9.4章:

    管理员用户应该会看到这样的链接,通过点击删除链接,我们希望管理员删除用户

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

    所以:

    current_user.admin? 表示“当前用户是管理员吗?”

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

    综上所述,&lt;% if current_user.admin? &amp;&amp; !current_user?(user) %&gt; 作为显示Delete 链接的测试意味着删除链接仅对管理员显示,但在显示他们自己的user 详细信息时不显示。也就是说,只有管理员可以删除用户,他们不能删除自己。

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

    检查this image 并注意Example User 没有删除链接,但其他人都有。

    【讨论】:

    • 你能解释一下这段代码&lt;% if current_user.admin? &amp;&amp; !current_user?(user) %&gt; = 只有管理员可以删除用户,他们不能删除自己。谢谢
    • cos true &amp;&amp; true =&gt; truetrue &amp;&amp; false =&gt; false,如果是true &amp;&amp; false,管理员如何查看删除操作?
    • 更新了答案并提供了进一步的解释
    • 完全正确 - 当第二个答案解析为 false 时,管理员看不到删除链接 - 也就是说,当显示的 usercurrent_user 时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多