0

アカウントを持っていない/サインインしていない人がユーザーのリストとすべてのユーザーの投稿を見ることができるようにしようとしています。

私のusers_controller.rbに私は持っています

class UsersController < ApplicationController
  before_filter :signed_in_user, 
                only: [:index, :edit, :update, :destroy]
  before_filter :correct_user,   only: [:edit, :update]
  before_filter :admin_user,     only: :destroy

  def index
    @users = User.paginate(page: params[:page])
  end

  def show
    @user = User.find(params[:id])
    @microposts = @user.microposts.paginate(page: params[:page])
  end

before_filter:signed_in_userが、サインインしたユーザーだけがユーザーリストにアクセスしたりユーザープロファイルを表示したりできるようにするものだと思います。エラーが発生せずにこれを変更するにはどうすればよいですか?

現在、3行目の:index部分を削除すると、次のエラーが発生します。

未定義のメソッド`admin? ' nilの場合:NilClass

これは/app/views/users/_user.html.erbの4行目にあります

<li>
2:   <%= gravatar_for user, size: 52 %>
3:   <%= link_to user.name, user %>
4:   <% if current_user.admin? && !current_user?(user) %>
5:     | <%= link_to "delete", user, method: :delete, confirm: "You sure?" %>
6:   <% end %>
7: </li>
4

1 に答える 1

0

私はあなたがroot :to => 'users#index'あなたのroutes.rbファイルに何かのようなものを持っていると仮定しています。

「サインイン/サインインしない」動作の一般的な解決策には、認証状態に基づいて条件付きでリダイレクトするか、状態に応じてさまざまなパーシャルをレンダリングすることが含まれます。

の下indexでは、@usersインスタンス変数には、状態に関係なく、常にページ化されたユーザーモデルが含まれます。しかし、私たちは何をするのかを知る方法がありsigned_in_userません。コードで検索するとdef signed_in_user、その機能を確認できます。それは、アプリが認証の状態をどのように処理するか、またはそれがあなたが構築しているものである場合にどのように進めるかについて何かを明らかにするかもしれません。

アップデート

したがって、オブジェクトにデータを入力していないように見えcurrent_userます。これは通常、オブジェクトを返すメソッドです。

Deviseを使用している場合は、そのcurrent_userヘルパーメソッドをビューで使用できるようにするために、追加の構成を行う必要がある場合があります。

このエラーは、nilを返すか、単に存在しないnilという事実が原因で発生します。current_userつまり、それは本質的nil.admin?にエラーを発生させようとしているのです。

たぶんあなたが探しているロジックは、

<li>
<%= gravatar_for user, size: 52 %>
<%= link_to user.name, user %>
<% if current_user.present? && current_user.admin? && !current_user?(user) %>
| <%= link_to "delete", user, method: :delete, confirm: "You sure?" %>
<% end %>

current_userRailsデバッガコンソールからの値を調べることもできます。debuggerコントローラにステートメントを追加して、いろいろと試してみることができます。rails consoleまた、Railsコンソール(コマンドラインから実行)を使用して、そこで遊ぶこともできます。

アップデート2

では、:indexを含めると、current_userオブジェクトに問題がないのはなぜですか。なぜそれを削除すると(上記の質問を参照)、current_userの人口が減少するのでしょうか

signed_in_userさらに調査する方法に何が含まれているのかわかりません。

しかし、あなたがまったくログインしていないので、私には予感がcurrent_user == nilあります。true

于 2012-08-06T22:59:35.860 に答える