0
#some instance variables
respond_to do |format|
  format.html
  format.xml {...}
  format.json {...}
end

respond_to 是简单地将所有实例变量发送到下一个网页还是做更多的事情?

我想知道 response_to 会发送多少数据。例如,如果我有很多实例变量@one @two @three 等等。它们都是由respond_to 发送的吗?是否还会捆绑并发送任何其他数据??

4

2 回答 2

0

没有您的指示,您的实例变量不会被发送到任何地方。

您可能有一个 .html.erb 模板,它在收到 HTML 请求时呈现实例变量 (format.html)。

对于 xml 和 json 响应,您需要告诉 Rails 要做什么。例如,您可以提供模板 .xml.builder。Rails 还可以自动为您呈现某些结构(数组等),只需调用render json: @one

于 2013-03-30T20:44:01.960 回答
0

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在格式不支持时得到。此外,您的索引操作将响应两种新格式:j​​s 和 HTML。

本文解释了您可以使用respond_to 块的所有方法。

于 2018-04-11T13:47:55.860 回答