到目前为止,我总是使用responds_to块指定操作响应的格式,如下所示:
responds_to do |format|
format.js { render :json => @record }
end
最近我意识到如果你只支持一种格式(如上例所示),你真的不需要那个块。最佳做法是将其保留或删除吗?
答案 0 :(得分:2)
我将与现有答案不同 - 我喜欢为我的所有行动设置responds_to
块。我发现,虽然稍微冗长一点,但它更清楚地自我记录了行动。它还可以在将来轻松支持其他格式。 编辑:另一个优势是它充当了守门人。未在块中声明的任何格式将自动提供“406 Not Acceptable”
答案 1 :(得分:0)
我不确定这是否是最佳做法,但通常我喜欢做的是让路线保持开放以响应(即通过将.:format
追加到最后),但只使用它在必要时在控制器中。
示例:
<强>的routes.rb 强>
map.connect :controller/:action/:id.:format
<强> model_controller.rb 强>
# Return a collection of model objects
def action_with_multiple_responses
@models = Model.all
respond_to do |format|
format.html #=> action_with_multiple_responses.html
format.xml { render :xml => @models }
end
end
# Return the first model object
def action_with_one_response
@model = Model.first
end
这样,你不会因为不必要的块而使你的action_with_one_response
方法变得混乱,但如果你想有一天在xml,json等中返回你的对象,你也可以很好地设置自己。
答案 2 :(得分:0)
除非你有多种响应类型,否则我会说不要使用respond_to。
只需要额外的代码来理解和处理和处理您的应用程序:
render :json => @record
比以下更简洁:
responds_to do |format|
format.js { render :json => @record }
end