はいくつかのrespond_with
パラメーターを受け入れます。たとえば、respond_with(@resource, methods: [:method])
これらのオプションはすべてのアクションで使用する必要があります。手動ですべてのメソッドに入れる代わりに、このコントローラーだけにデフォルトのオプションを設定する可能性はありますか?
質問する
267 次
1 に答える
1
これを行う簡単でカスタマイズ可能な方法は、responds_with をラップする新しい応答メソッドを作成することです。
例えば:
class ResourcesController < ApplicationController
def index
@resources = Resource.all
custom_respond_with @resources
end
private
def custom_respond_with(data, options={})
options.reverse_merge!({
# Put your default options here
:methods => [ :method ],
:callback => params[:callback]
})
respond_with data, options
end
end
もちろん、respond_with を完全に上書きすることもできますが、メソッドの名前を変更すると、コードがより明確になることがわかります。また、ほとんどのアクションで custom_respond_with を使用できますが、必要に応じて標準の Respond_with を 1 つまたは 2 つ使用できます。
これをさらに一歩進めると、custom_respond_with メソッドを ApplicationController に移動すると、必要に応じてすべてのコントローラーで使用できます。
コントローラーごとに異なるデフォルト オプションを指定したい場合は、簡単に行うことができます。
class ResourcesController < ApplicationController
def index
custom_respond_with Resource.all
end
private
def custom_respond_options
{ :methods => [ :method ] }
end
end
class ApplicationController < ActionController::Base
protected
def default_custom_respond_options
{}
end
def custom_respond_with(data, options={})
options.reverse_merge! default_custom_respond_options
respond_with data, options
end
end
于 2012-09-28T23:35:57.087 に答える