0

更新 して解決しました。コード内の if ステートメントに問題がありました

すべてがローカルで正常に動作しますが、エラーが発生する理由がわかりません

Rails アプリがあり、tbrown などの URL "/users/username" にアクセスしようとしています。未定義のメソッド「admin」または他の何かが原因ですか?admin_user はすでに application_controller.rb で定義されており、admin_user.rb モデルがあります。ここに投稿するのはherokuのログとコントローラーです

ヒロクのログ

2013-03-20T08:05:55+00:00 app[web.1]: Started GET "/users/tbrown" for xx.xx.xx
.xx at 2013-03-20 08:05:55 +0000
2013-03-20T08:05:55+00:00 app[web.1]:
2013-03-20T08:05:56+00:00 app[web.1]:
2013-03-20T08:05:56+00:00 app[web.1]:     22:     <% end %></div>
2013-03-20T08:05:56+00:00 app[web.1]: ActionView::Template::Error (undefined met
hod `admin?' for nil:NilClass):
2013-03-20T08:05:56+00:00 app[web.1]:     23:     <% if current_user.admin? %>
 2013-03-20T08:05:56+00:00 app[web.1]:     21:     <span class="content2"><%= com
ment.comment_content %></span>
2013-03-20T08:05:56+00:00 app[web.1]:     24:     <%= link_to "delete", pos
t, method: :delete,

アプリケーションコントローラー

def admin_user?
    unless current_user && current_user.admin?
      redirect_to root_url
      return false
    end
  end
4

1 に答える 1

2

問題はオンラインであなたのapp/views/posts/_post.html.erb見解にあります:

<% if current_user.admin? %>

これは、 current_user が nil でない (つまり、ユーザーがログインしている) ことを前提としています。あなたはすでにコントローラーadmin_user?メソッドでその問題を防御的にコーディングしています。同じ行に沿って (ただしリダイレクトなしで) ヘルパー メソッドを実装し、代わりにそれをビューから呼び出す方がよい場合があります。

于 2013-03-20T08:39:56.363 に答える