2016-05-28 4 views
0

私のバックエンドのAPI専用アプリケーションは、次のコードのためにRestClient::InternalServerError: 500 Internal Server Errorのクライアントに応答しています(レンダリングするテンプレートもありません)。Backend-only(API)アプリケーションでのActionView :: MissingTemplateの防止?

def create 
    @project = Project.create(params.require(:project).permit(:name)) 
    @project.update_attributes(key: Devise.friendly_token) 

    respond_to do |format| 
     format.html 
     format.json { render json: @project } 
    end 
end 

現在のソリューション:Railsのに基づいて

Layouts and Renderingに案内し、これを使用することによって防ぐことができるrender json: @project

出典:http://guides.rubyonrails.org/layouts_and_rendering.html

掲載:

しかし、私はクライアントにフォーマットのオプションを与えたいので、respond_toブロックがより理想的な選択肢です。

これらを組み合わせて最初のブロックを使用する方法はありますか?500というエラーが発生していませんか?

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

+0

HTML形式で返されると思われるものは何ですか? – Baldrick

+0

私は、多くのサンプルアプリケーションで複数のフォーマットを提供してきました... APIのみのアプリケーションの場合はHTML応答を許可する価値はありませんか? –

+1

すべてのクライアントがJSONを期待している場合は、要求されたフォーマットを無視します: 'respond_to'ブロックを削除し、' render json:@ project'だけを残してください。そうすれば、コードはよりシンプルになり、クライアントによって使いやすくなります。 – Baldrick

答えて

0

ユーザーがhtml応答を求めたらどうなるでしょうか?

  • すべてのリクエストをjsのように処理する必要がある場合は、respond_to構造全体を取り出してください。
  • htmlで何かを行う必要がある場合は、何かを返すかレンダリングするビューを作成する必要があります(またはrender nothing: true)。
  • より良いエラーを返すには、htmlパーツを削除して、406 Not Acceptableを受け取るようにします。
関連する問題