【问题标题】:Rails' respond_to - syntax analysisRails 的 respond_to - 语法分析
【发布时间】:2013-08-12 12:50:39
【问题描述】:

这是一个 Rails 代码:

respond_to do |format|
  format.html
  format.xml { render :xml => @users }
  format.json { render :json => @users }
end

我知道它的作用。但我不知道命令 syntax 的含义。

  1. format.xml -- 什么是xml,这是format 对象拥有的方法,对吗?我在哪里可以找到它的签名(或描述)?
  2. { }——一个块还是一个哈希?我认为这是一个障碍。
  3. render——一种方法?我在哪里可以找到它的签名(在 api 文档中的哪里)?
  4. :xml => @users -- 一个哈希,其中:xml => 是一个键,对吗?

所以它可以表示为,对吗?:

respond_to do |format|
  format.html
  format.xml do
    render(:xml => @users)
  end 
  format.json do
    render(:json => @users)
  end
end

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

格式。*

使用调试器,我了解到formatActionController::MimeResponds::Collector 的一个实例。其中包括AbstractController::Collector,它使用method_missing来响应各种格式调用。

if Mime::SET.include?(mime_constant)
  AbstractController::Collector.generate_method_for_mime(mime_constant)
  send(symbol, &block)
else
  # ...

{ 渲染 xml: ... }

查看method_missing,很明显它需要一个块。

渲染

是的,render 是一种方法。 Documentation.

:xml => @用户

是的,它是一个哈希。关键是符号:xml。也可以写成

render xml: @user

render(xml: @user)

render({xml: @user})
render({:xml => @user})

【讨论】:

    【解决方案2】:
    1. format 来自对方法的请求,http://app.com/controller/method.format 其中格式可以是.html.csv 等。format.xml 的含义只是检查用户是否请求了 xml 页面 (http://app.com/controller/method.xml.
    2. 阻止,就像你描述的那样。
    3. 在围场! http://apidock.com/rails/ActionController/Base/render
    4. 正确,渲染将根据存在的键进行操作。在您的情况下,由于现有密钥是 :xml,因此渲染方法将输出格式为 XML 的 @users

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多