布局
在模板中可以通过布局提供子模板。这就意味着RoR可以通过布局进行嵌套操作。布局提供了一个典型网页的各种组成部分,如菜单、页脚等。下面是一个简单的关于布局的例子。
| <html> <head> <title>Form: <%= controller.action_name %></title> <%= stylesheet_link_tag 'scaffold' %> </head> <body> <%= @content_for_layout %> </body> </html> |
上面的代码是一个标准的HTML布局。最值得关注的是变量@content_for_layout。这个变量中保存了从控制层传过来的数据。下面代码演示了如何从控制层传递数据到一个RHTML文件:
| def method @msg ="测试!" end |
下面是method.rhtml 文件中的代码:
| <h1><%= @msg %></h1> |
变量@content_for_layout 的内容如下:
| <h1>测试!</h1> |
由布局生成的HTML代码如下:
| <html> <head> <title>Form: method</title> <link href="/stylesheets/scaffold.css" media="screen" rel="Stylesheet" type="text/css"/> </head> <body> <h1>测试!</h1> </body> </html> |
上面的例子只是简单地演示了如何使用布局。在RoR提供的自动生成代码机制中的scaffold就是使用布局来生成的输出文件。在下一部分将给一个简单的例子来演示如何使用模板和格式化技术。
实例
在这个例子中显示了一些被格式化的时间、字符串和数字。
下面的代码是控制层的代码:
| class SayController < ApplicationController def hello @time=Time.now end end |
下面是视图层(这个文件就是一个模板)的代码:
| <html> <head> <title>你好!</title> </head> <body> <h1>现在报时:<%=@time%></h1> </body> </html> |
现在让我们使用格式化功能:
| class SayController < ApplicationController def hello @time=Time.now @rule="This is a rule" @price=123 end end |
下面在视图中使用格式化助手进行格式化:
| <html> <head> <title>你好!</title> </head> <body> <br>现在报时:<%=@time%> <br>时间间隔:<%= distance_of_time_in_words(@time, Time.local(2006, 10, 11)) %> <br>高亮度显示rule:<%= highlight(@rule, "rule") %> <br>将123转换成美元: <%= number_to_currency(@price) %> </body> </html> |
