#some instance variables
respond_to do |format|
format.html
format.xml {...}
format.json {...}
end
respond_to 是简单地将所有实例变量发送到下一个网页还是做更多的事情?
我想知道 response_to 会发送多少数据。例如,如果我有很多实例变量@one @two @three 等等。它们都是由respond_to 发送的吗?是否还会捆绑并发送任何其他数据??
#some instance variables
respond_to do |format|
format.html
format.xml {...}
format.json {...}
end
respond_to 是简单地将所有实例变量发送到下一个网页还是做更多的事情?
我想知道 response_to 会发送多少数据。例如,如果我有很多实例变量@one @two @three 等等。它们都是由respond_to 发送的吗?是否还会捆绑并发送任何其他数据??
没有您的指示,您的实例变量不会被发送到任何地方。
您可能有一个 .html.erb 模板,它在收到 HTML 请求时呈现实例变量 (format.html)。
对于 xml 和 json 响应,您需要告诉 Rails 要做什么。例如,您可以提供模板 .xml.builder。Rails 还可以自动为您呈现某些结构(数组等),只需调用render json: @one
Rails 会遍历注册的格式并尝试找到兼容的格式,否则会引发错误。
例子:
def index
@stories = Story.all
end
index
动作没有respond_to
块。如果客户端要求获取 TEXT 格式的页面,则会导致以下异常:
ActionView::MissingTemplate (Missing template blogs/index ... with { ... :formats=>[:text], ...})
respond_to
我们可以通过添加一个块来轻松解决这个问题:
def index
@stories = Story.all
respond_to do |format|
format.html
format.js
end
end
更改后,客户端会406 error
在格式不支持时得到。此外,您的索引操作将响应两种新格式:js 和 HTML。
本文解释了您可以使用respond_to 块的所有方法。