2017-11-05 4 views
0

これは実際に私の頭を傷つけています。私がやろうとしていることは、まっすぐ進むはずですが、何らかの理由で私はそれを働かせることができません。リアクションフロントエンドからRails APIエンドポイントにフェッチしようとしたときにNoMethodErrorが発生する

Reactコンポーネントに表示するように設定したRails APIエンドポイントからいくつかの情報を取得しようとしているので、

componentDidMount() { 
    fetch(`/api/v1/coffee_formulas`) 
    .then(response => response.json()) 
    .then(body => { 
     this.setState({ formulas: body }) 
    }) 
    } 

をそしてAPIエンドポイントは、次のようになります:

このようなルックスをフェッチマイ

def index 
    formulas = current_user.coffee_formulas 
    render json: { status: 'SUCCESS', message: 'Loaded coffee formulas', coffee_formulas: formulas }, status: :ok 
    end 

私を混乱させている事、私はhttp://localhost:3000/api/v1/coffee_formulasに移動して、正確に見ることができるという事実があります私はReactの終わりに乗りたいJSONです。私の前提は、私​​が同じ点にフェッチすることができたが、私は何かが欠けていると思う。

カップルの事は、私が正常に同じAPIを投稿することができています

  • 注意します。
  • 私はGoogle OmniAuthを使ってセッションとcurrent_userを生成しています。
  • formulasの状態を同じ結果で少し異なる方法で設定しようとしました。 (例:formulas: body.formulasformulas: body.coffee_formulasなど)
  • 私は私の端末で見ている正確なエラーがある:

NoMethodError (undefined method 'coffee_formulas' for nil:NilClass):

  • 私のコンソールでエラーが500 (Internal Server Error)
です

私はこれはかなり簡単なことだと思ったが、私はここでかなり重要な詳細が欠落していると思う。どんな提案も非常に高く評価されます!

答えて

0

それで、それは自己をフェッチすることで問題になった。コントローラは実際に私が望んでいたものを実行していましたが、フェッチは次のようにフォーマットする必要がありました:

componentDidMount() { 
    fetch(`/api/v1/coffee_formulas.json`, { 
    credentials: 'same-origin', 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
    }, 
    method: 'GET' 
    }).then(response => response.json()) 
    .then(body => { 
     this.setState({ 
     formulas: body.coffee_formulas, 
     user: body.current_user 
     }) 
    }) 
    } 
0

NoMethodError (undefined method 'coffee_formulas' for nil:NilClass)は、nilクラスのcoffe_formulasメソッドを呼び出そうとしていることを意味します。 current_userヘルパーはnilを返しますので、あなたのリクエストを承認していません。

+0

私はまだ私が得意ではないことが分かりません。 'formula = current_user.coffee_formulas'を' formula = CoffeeFormula.all'に変更してデータベースのすべてのcoffee_formulasを取得すれば、私の端末でエラーは発生しませんが、何を見ても何も出ません'formula'の状態はです。もう一つは、current_userがどのように 'nil'となるのかということですが、' http:// localhost:3000/api/v1/coffee_formulas'に行くと、current_userに関連する情報だけが表示されます。アカウントの更新も必要に応じて切り替えます。 –

+0

'index'メソッドのシグネチャの直後にブレークポイントEg [pry](https://github.com/pry/pry)を追加して、リアクションを介して呼び出されたときにcurrent_userの内容を確認してください – sameera207

+0

あなたは@awesome_treehouseですおそらく 'devise'宝石を使用しています。コントローラに次の行を追加してもよろしいですか? 'before_action:authenticate_user! ' このコールバックがなければ、current_userは解決されません。 – Gregy

関連する問題