0

はいくつかのrespond_withパラメーターを受け入れます。たとえば、respond_with(@resource, methods: [:method]) これらのオプションはすべてのアクションで使用する必要があります。手動ですべてのメソッドに入れる代わりに、このコントローラーだけにデフォルトのオプションを設定する可能性はありますか?

4

1 に答える 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 に答える