这是一个Rails代码:
respond_to do |format|
format.html
format.xml { render :xml => @users }
format.json { render :json => @users }
end
我知道它的作用。但我不知道命令语法 -wise的含义。
format.xml
- 什么是xml
,这是一个对象format
具有的方法,对吗?我在哪里可以找到它的签名(或描述)?{ }
- 一个块或哈希?我认为这是一个障碍。render
- 一种方法?我在哪里可以找到它的签名(在api文档中的位置)?:xml => @users
- 一个哈希,其中:xml =>
是一个关键,对吗?所以它可以被重新命名为,对吧?:
respond_to do |format|
format.html
format.xml do
render(:xml => @users)
end
format.json do
render(:json => @users)
end
end
答案 0 :(得分:0)
format
来自对方法http://app.com/controller/method.format
的请求,其中格式可以是.html
或.csv
等。format.xml
的含义仅仅是检查用户是否请求了xml页面(http://app.com/controller/method.xml
。:xml
,因此render方法将输出格式为XML的@users
。答案 1 :(得分:0)
使用调试器,我了解到format
是ActionController::MimeResponds::Collector
的一个实例。它包含AbstractController::Collector
,使用method_missing
来响应各种格式调用。
if Mime::SET.include?(mime_constant)
AbstractController::Collector.generate_method_for_mime(mime_constant)
send(symbol, &block)
else
# ...
看method_missing
,很明显它需要一个阻止。
是的,渲染是一种方法。 Documentation
是的,这是一个哈希。关键是符号:xml
。它也可以写成
render xml: @user
render(xml: @user)
render({xml: @user})
render({:xml => @user})