代码之家  ›  专栏  ›  技术社区  ›  tfwright

总是使用响应?

  •  6
  • tfwright  · 技术社区  · 15 年前

    到目前为止,我一直使用响应块为操作指定响应格式,如:

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

    最近我意识到,如果您只支持一种格式(如上面的示例中所示),那么就不需要该块。把它放在里面,还是把它移走?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Ben    15 年前

    我将与现有的答案不同——我喜欢 responds_to 阻止我的所有行为。我发现,虽然有些冗长,但它更清楚地记录了自己的行为。它还使将来支持其他格式变得容易。 编辑: 另一个好处是它可以充当门卫。块中未声明的任何格式都将自动提供“406不可接受”

        2
  •  0
  •   jerhinesmith    15 年前

    我不确定这是否是最佳实践,但通常我喜欢做的是让路线保持开放,以响应(即通过附加 .:format 最后),但仅在必要时在控制器中使用。

    例子:

    惯例

    map.connect :controller/:action/:id.:format
    

    型号控制器.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等形式的对象,您也可以很好地设置自己。

        3
  •  0
  •   Toby Hede    15 年前

    我会说,除非您有多种响应类型,否则不要使用Response-to。

    它只是理解和处理应用程序的额外代码:

    render :json => @record
    

    比以下内容简洁得多:

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