1

这是一个 Rails 代码:

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

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

  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
4

2 回答 2

0

格式。*

使用调试器,我了解到这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 是一种方法。文档

:xml => @user

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

render xml: @user

render(xml: @user)

render({xml: @user})
render({:xml => @user})
于 2013-08-10T21:29:05.423 回答
0
  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. 正确,render 将根据存在的键进行操作。在您的情况下,由于现有键是:xmlrender 方法将输出@users格式化为 XML。
于 2013-08-10T21:06:18.890 回答