2010-11-22 6 views
0

私はRailsでJSON APIを作っていますが、respond_withのカスタムクラス(ActiveRecordを継承したものではありません)を使用する場合を除いて、正常に動作するようです。シンプルなレスポンスラッパーをあるRails 3でrespond_withをカスタムクラスで使用するにはどうすればよいですか?

class JsonResponse 
    def initialize(data, status) 
    @data = data 
    @status = status 
    end 

    def as_json(options={}) 
    { 
     :data => @data, 
     :status => @status 
    } 
    end 
end 

はここに私のクラスです。私はこれやってみた場合:

def create 
    unless(Match.find_by_user_id(params[:user_id])) 
    Match.create(:user_id => params[:user_id]) 
    end 
    time_response = JsonResponse.new("5", "success") 
    respond_with(time_response) 
end 

を私はこのエラーを取得する:

NoMethodError (undefined method `model_name' for JsonResponse:Class): 
    app/controllers/matches_controller.rb:9:in `create' 

任意のアイデア? respond_withが私を夢中にしています。 respond_toと連携respond_withこのことができますが、私はrespond_toが表示されない場合、私はわからない

+0

質問をより読みやすくタイトルにするために少しクリーンアップしました。 –

+0

ご協力いただきありがとうございます! – Danny

答えて

1
  1. あなたのクラスは、to_jsonをメソッドへの応答

  2. は明らかに設定する必要があります。respond_withメソッド内の場所オプションを。 Railsはメソッドに渡すオブジェクトから安静なルートを作成しようとしますが、オブジェクトがリソースではないため、エラーが発生します。

+0

しかし、どのように適切な応答ステータスを追加しますか? 'ActiveRecord'オブジェクトを' respond_with'に渡すと、それが有効なレコードかどうかを自動的に検出するようです。カスタムクラスでこれをどうやって作るのですか? –

0

... ...

respond_to :html, :xml, :json 

この

は、コントローラレベルで定義することができます

例:

class UsersController < ApplicationController::Base 

    respond_to :html, :xml, :json 

    def index 
    respond_with(@users = User.all) 
    end 

    def create 
    @user = User.create(params[:user]) 
    respond_with(@user, :location => users_url) 
    end 
end 

あなたはjsonテンプレートを定義できます... "JSONResponse"クラスを取得する場合、jsonテンプレートを空のままにしておくかどうかわかりません。

ちょうど思考...

+0

私はrespond_toを持っていた、私はちょうどコントローラのその部分を表示しなかった – Danny

+0

申し訳ありませんが、それを知らなかった –

関連する問題