0

我正在阅读 Michael Hartl 的书“Ruby on Rails Tutorial Learn Web Development with Rails”。在他解释如何获得删除用户的管理权限的部分中,我似乎无法让它工作。删除链接不会显示在网络应用程序上,我对为什么会发生这种情况感到困惑。这是我下面的未分解代码,它位于以下目录中:app/views/users/index.html.erb

<% provide(:title, 'All users') %>
<h1>All users</h1>

<%= will_paginate %>

<ul class="users">
  <% @users.each do |user| %>

      <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: "Are you sure?" } %>
        <% end %>
      </li>

  <% end %>
</ul>

<%= will_paginate %>

current_user.admin? && !current_user?(user)方法位于:app/helpers/sessions_helper.rb

  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

我已经被这个问题困扰了很长一段时间,并尝试了许多不同的方法来解决这个问题,但都没有奏效。我正在使用 Rubymine IDE 在 Windows 7 上运行 Rails。本教程是在 Mac OS X 操作系统上完成的,我认为问题可能与我的设置有关。

在运行 RSpec 与在 Mac OS X 上运行它时,使用 Windows cmd 进行测试失败是否存在已知问题?

任何帮助将非常感激。

谢谢你。

4

2 回答 2

1

我才发现出了什么问题!

这个方法写错了

def current_user?(user)
    user = current_user
end

使上述相应代码工作的正确方法是:

def current_user?(user)
    user == current_user
end

感谢您的所有意见!

于 2013-10-30T20:10:20.233 回答
0

确保在您的控制器中调用您的控制器中的销毁操作。到目前为止,您的代码看起来不错,我假设您没有使用 cancan 进行授权。

在视图文件中

<% if current_user.admin? && !current_user?(user) %>
 <%= link_to "delete", user, method: :delete, data: { confirm: "Are you sure?" } %>
<% end %>

控制器

def destroy
  @user = User.find(params[:id])
  @user.destroy

  respond_to do |format|                                                                        
   format.html { redirect_to users_path }                                            
   format.json { head :no_content }                                                            
  end     
end
于 2013-10-30T15:09:36.347 回答