Rails 3 アプリケーション用の JSONP API を作成しようとしています。現在、コントローラーには、次のパターンに従う多くのアクションがあります。
# This is from my users_controller.rb, as an example
def index
@users = User.all
respond_with(@users, :callback => params[:callback])
end
:callback => params[:callback]これはそのまま機能しますが、すべてのアクションの への呼び出しでを繰り返さなくて済むように、DRY したいと思いrespond_withます。これどうやってするの?
更新:上記のコードの醜い点の 1 つは、:callback => params[:callback]JSON だけでなく、任意の応答形式に対してオプションが渡されることです。次のコードはおそらくより正確です。
def index
@users = User.all
respond_with(@users) do |format|
format.json { render :json => @users, :callback => params[:callback]}
end
end
この問題に対処するために考えた方法がいくつかありますが、それらを機能させる方法がわかりません。
- パラメーターを自動的に含めるオプションを
render受け入れるように (おそらくアプリケーション コントローラーで)オーバーライドします。このようにして、上記のコードを次のように変更できます。これはやや短いです。:jsonp:callback => params[:callback]
def index
@users = User.all
respond_with(@users) do |format|
format.json { render :jsonp => @users}
end
end
to_json私の問題を解決するためにオーバーライドするレスポンダーを作成してください。そうすれば、ブロックを省略して電話をかけるだけrespond_with(@users, :responder => 'MyResponder')で問題を解決できます。または、 plataformatec の Responders gemを使用してアプリケーション レスポンダーにこのコードを含めることもできるので、respond_with(@users)それだけで十分です。