respond_with
接受一些参数,例如respond_with(@resource, methods: [:method])
应在每个操作中使用这些选项。因此,不是手动将其放入每个方法中,是否有可能为此控制器设置一些默认选项?
答案 0 :(得分: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,但如果需要,可以使用标准的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