【问题标题】:How to I get the destroy action to work with administrative control in Rails?如何让销毁操作与 Rails 中的管理控制一起使用?
【发布时间】:2013-10-31 04:10:20
【问题描述】:

我正在阅读 Michael Hartl 的书,“Ruby on Rails 教程学习使用 Rails 进行 Web 开发”。在他解释如何获得删除用户的管理权限的部分中,我似乎无法让它工作。删除链接不会显示在网络应用程序上,我对为什么会发生这种情况感到困惑。这是我下面的未分解代码,它位于以下目录中: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? &amp;&amp; !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 进行测试失败是否存在已知问题?

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 您确定授予您的用户管理员权限吗?
  • 除非是拼写错误,否则您的current_user?(user) 方法是错误的。您不应该与user == current_user 进行比较而不是与user = current_user 进行比较吗?

标签: ruby-on-rails ruby rspec admin destroy


【解决方案1】:

我刚刚发现出了什么问题!

这个方法写错了

def current_user?(user)
    user = current_user
end

让上面的相应代码工作的正确方法是这样的:

def current_user?(user)
    user == current_user
end

感谢您的所有意见!

【讨论】:

    【解决方案2】:

    确保在您的控制器中调用了您的控制器中的销毁操作。到目前为止,您的代码看起来不错,我假设您没有使用 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
    

    【讨论】:

    • 我尝试了您的建议,但仍然无法正常工作。当我以原始方式和您建议的方式尝试时,html 无法正确显示。该页面应类似于此链接:railstutorial.org/images/figures/…)。我目前得到的页面看起来像这样减去每个名称旁边的所有删除链接。您知道为什么页面上的 html 可能无法显示吗?
    猜你喜欢
    • 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
    相关资源
    最近更新 更多