2017-08-19 34 views
0

私はレール内のデータベースからデータを取得しようとしている、これは私のコントローラファイルであるレール500内部サーバーエラー

class PathsController < ApplicationController 
    before_filter :authenticate_user! 
    skip_before_filter :verify_authenticity_token 
    def getall 
    @result = Path.select('x', 'y') 
    end 
    respond_to do |format| 
     format.json { render json: @result } 
    end 

end 

は私のJSはここ

function makelines() 
{ 
    $.ajax({ 
    type: "GET",// => method type 
    url: "/path", // => Target function that will be return result 
    contentType:"application/json", 
    success: function(result){ 
     result = JSON.parse(result); 
     console.log(result); 
    } 
    }); 
} 

機能であるルート

です
match '/path => 'Paths#getall', via: [:get, :post], :default => { :format => 'json' } 
+0

エラーについての詳細を教えてください。 –

答えて

1

この状況で最初にすべきことは、コンソールまたはログを参照することです。例外を突き止めるのに最も役立つでしょう。

def getall 
    @result = Path.select('x', 'y') 

    respond_to do |format| 
     format.json { render json: @result } 
    end 
end 
+0

ログ: ActionView :: MissingTemplate(テンプレートパス/ getall、{locale => [:en]、:formats => [:HTML::テキスト、 url_encoded_form、:json、:pdf、:zip、:jpeg、:jpeg、:jpeg、:bmp、:tiff、:mpeg、:xml、:rss、 :C:/ Users/Ali Ammar/Weblio英和対訳辞書はプログラムで機械的に意味や英語表現を生成しているため、不適切な項目が含まれていることもありますので、あらかじめご了承ください。警察/警察/アプリ/ビュー " *" C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/devise-4.2.0/app/views " ): –

+0

これは問題です'respond_to'はあなたのアクション内で定義されていないので、デフォルトではレスポンスをレンダリングするためのテンプレートを探します。 –

+0

どのようにそれを修正するには? –

0

のは、あなたを改善してみましょう:私は問題はあなたがコントローラのアクション

def getall 
    @result = Path.select('x', 'y') 
end 
    respond_to do |format| 
    format.json { render json: @result } 
    end 

respond_to外があるべき呼び出しているということであるという推測を取ると保証するよ、と述べ

少しコードを書いてください:

def getall 
    @results = Path.select('x', 'y') 
    respond_to do |format| 
     if @results.count > 0 
     format.json { render json: @results, , status: :ok } 
     else 
     format.json { render json: @results.errors, , status: :not_found } 
     end 
    end 
end 

1レールあたりの慣習複数の商品を返品する場合、resultの代わりにresultsを返すようにしてください。

JSONオブジェクトをAJAXメソッドに返すと、200(:ok)または404(:not_found、データベースにレコードがない場合)のいずれかを返すと良いと思います

+0

空のコレクションの404を返すことは私にとっては奇妙なようです。これは個々の項目 'GET/paths/1'には意味がありますが、完全に有効でクリーナー(IMHO)には空の結果セットがあります。これをページロードとみなした場合、ユーザーは「パス/すべて」ページにアクセスしませんが、現在はパスがないことを伝えているだけです(追加する気になりますか?)。 –

+0

ペイロードがNULLの200を選択することもできます。しかし、サーバーからの応答をJSコードで管理する必要があることを混乱させないでください。そのため、エラーの処理はUIに伝播する必要があります。 404をお持ちの場合は、このエラーをキャッチして、新しいレコードを作成するなどの適切な情報をユーザーに表示するだけです。 –

+0

JSONステータスコード(google)https://cloud.google.com/storage/docs/json_api/v1/status-codesこの場合404を使用します –

関連する問題