2016-04-17 12 views
-1

私はApplicationControllerbefore_action :authenticate_user!を追加した場合、私はエラーを取得する:このファイルから来て何Devise Token Auth:authenticate_user!作品間違っ

ActionView::Template::Error (undefined method `name' for nil:NilClass): 
    1: json.data @users, :name, :username 

show.jbuilder

​​

マイコントローラ:

users_controller.rb

class UsersController < ApplicationController 

    before_action :authenticate_user! 

    def index 
    @users = User.all 
    end 

end 

私はbefore_action :authenticate_user!すべてがうまく動作します削除した場合、私は、ユーザーのリストをJSONオブジェクトを取得します。

どうしてですか?デバイスは通常401を返しますが、devise_token_authが私のshowをトリガーしようとしており、データベースにアクセスできないために失敗します。どのようにこの奇妙な行動を修正するには?

+0

':

アプリ/ビュー/ユーザー/ show.json.jbuilder:

json.(@user, :name, :username) 

アプリ/ビュー/ユーザー/ index.json.jbuilder!のように見える? – jack

+0

@jackどういう意味ですか? :authenticate_user!デビーズビルトインヘルパーメソッド – Viktor

答えて

1

あなたのコントローラーは非常に特異で、1つのリソース用に構築されたビューにコレクションを送信しているというエラーがあります。

Railsではshowアクションは、単一のリソースの表示に対応し、通常:idパラメータ経由でIDを渡すことに依存しています:

class UsersController < ApplicationController 
    # GET /users 
    def index 
    @users = User.all 
    end 

    # GET /users/:id 
    def show 
    @user = User.find(params[:id]) 
    end 
end 

あなたが明示的にどちらかのレンダリング呼び出す必要はありません。 authenticate_user `の実装がどのように

json.comments @user do |json, user| 
    json.(user, :name, :username) 
end 
+1

IMHO 'jbuilder'は時間の無駄です。 ActiveModelSerializersは高速で、テストが簡単で、乾燥機が多くなっています。 jbuilderがデフォルトでRailsに含まれる唯一の理由は、それがDHHのペットプロジェクトだからです。 – max

+0

これは私の実際のコントローラではなく、エラーの例のように1秒で書かれています。問題は 'jbuilder'にありました。そして、ActiveModelSerializers suggetionに感謝します。私はそれを確認します:) – Viktor

関連する問題