2012-06-26 6 views
0

respond_with принимает некоторые параметры, например. respond_with(@resource, methods: [:method]) Эти параметры должны использоваться в каждом действии. Поэтому вместо того, чтобы вручную вводить его в каждый метод, есть ли возможность установить некоторые параметры по умолчанию только для этого контроллера?Rails 3.2 response_with

ответ

1

Простой и настраиваемый способ сделать это, создав новый метод ответа, который обертывает responses_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 в большинстве действий, но стандартный response_with в одном или двух случаях, если это необходимо.

Принимая этот шаг дальше, если вы переместите метод 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