总是使用respond_to?

时间:2010-01-22 23:32:23

标签: ruby-on-rails

到目前为止,我总是使用responds_to块指定操作响应的格式,如下所示:

responds_to do |format|
  format.js { render :json => @record }
end

最近我意识到如果你只支持一种格式(如上例所示),你真的不需要那个块。最佳做法是将其保留或删除吗?

3 个答案:

答案 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