0

Michael Hartl の著書「Ruby on Rails Tutorial Learn Web Development with 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? && !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 コマンドを使用してテストが失敗するという既知の問題はありますか?

どんな助けでも大歓迎です。

ありがとうございました。

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

コントローラーで destroy アクションを呼び出していることを確認してください。これまでのところ、コードは問題ないように見えますが、承認に 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 に答える