http://blog.csdn.net/abbuggy/article/details/7628834
到现在为止,我们已经将web请求响应的全过程:
- web服务器接受浏览器请求。
- 尝试从public目录查询与请求一致的资源文件返回。《Ruby on Rails,服务端如何响应页面提交的请求》
- 如果没能找到资源,将请求转交给Routes通过其配置规则找到合适的Controller和Action。《Ruby on Rails,Routes配置routes.rb及请求解析规则》
- Controller收集整理好数据,挑选合适的View进行显示。《Ruby on Rails,利用View Templates生成动态页面》和《Ruby on Rails,在Controller中指定页面重定向》
- View从Controller中获取需要显示的信息并将其转化为HTML。《Ruby on Rails,通过实例变量从Controller向View传递数据》
- HTML被交给浏览器显示。
从头到尾走了一遍。唯一缺少的就是在Templates中增加链接,让使用者点击链接触发一个又一个新的请求不断的与站点交互。
现在看看如何为页面增加链接。一个普通的HTML链接类似于下面的格式,显示在页面上的内容写在<a>与</a>之间,例子里对应"link"。希望转向的目的写在href=后面的双引号中,例子里对应“/demo/index”。这个链接将把我们指向名为demo的Controller中的名为index的Action。
<a href= "/demo/index" >link</a>
我们当然可以直接在Templates中使用标准格式的链接,但在实际的Rails应用中很少会有机会看到直接使用<a>标签的写法。因为Rails为我们提供了更加方便强大的工具来增加链接。在Rails中使用link_to(text,target)方法返回描述链接的语句,将其嵌入Templates中<%=link_to(text,target)%>。传入的text是需要显示在页面上的内容,target是想要转向的地方。target可以是一个简单的“/demo/index”,还可以写成如“{:controller =>’demo‘, :action => 'index'}”直接指明我们需要哪个Controller中的哪个Action,这两种方式到最后都会生成与标准<a>完全相同的结果。最后一种写法能够更方便的识别出哪个是Controller,哪个是Action。
<h1>Demo#hello</h1>
<p>Hello Page!</p>
<a href= "/demo/index" >a tag approach</a>
<%= link_to("url approach","/demo/index")%>
<%= link_to("rails approach",{:controller =>'demo',:action => 'index'})%>
<p>Find me in app/views/demo/hello.html.erb</p>
这里用三种不同的方式向页面添加链接,最后一种书写的内容稍多但是可读性更强。
![](https://img-my.csdn.net/uploads/201206/03/1338734509_4699.png)
效果是一样的,导向/demo/index。
![](https://img-my.csdn.net/uploads/201206/03/1338734633_3358.png)