一直没有太弄明白关于respond_to 和 redirect_to之前的区别,因为以前的代码大部分都是由rails自动生成的脚手架,在这个基础上在进行一些修改,但是最近想把这些代码都手写一遍,熟悉一下,所以就产生了问题,不知道这两者的区别是什么。查了查文档,是这样写的:
respond_to:
respond_to do |format| format.html format.xml { render xml => @people.to_xml } end
上面的代码是说,如果客户端需要从这个action得到一个HTML的响应,就渲染html模板,但是如果客户端需要XML,那么就返回XML格式的数据。(rails根据客户端所提交请求中HTTP accept header来决定响应的类型)
上面的一段话是我文档当中的解释(当然只是大意,翻译的并不准确,因为还涉及到一些上下文的关联),在文档当中还有这样的一段话,大意是说:如果在应用程序当中不需要web-service的支持,那么就可以用redirect_to将请求重定向到一个action,而如果需要web-service的支持,就需要使用respond_to。不知道我这样的理解是否正确?
respond_to是服务器对客户端请求的响应,所有的响应方式都是在这里处理的。而redirect_to是响应方式之一,respond_to与redirect_to不是一个层次上的东西,所以saberma会问你是不是想问render和redirect_to的区别。
render是将响应内容直接反馈给客户,而
redirect_to相当于重定向,要求客户端再次重新发送请求,“新的请求地址就是redirect_to后面的参数了”
render的另外一个用法容易与redirect_to混淆,就是在controller内部重定向到一个新的action,这种处理方法保持了请求中的params,而redirect_to是一个全新的请求,丢弃了params
你问的差别应该是render和redirect_to的区别吧
render就是将生成结果直接返回给浏览器
redirect_to是通知浏览器重新发一个请求过来,新的请求地址就是redirect_to后面的参数了