icon Ruby on Rails 2.0 日记

第4章 模板文件的扩展名

上一章的SQLite3中,对从 Rails 2.0.2 开始引入的新的默认的轻量级数据库进行了说明。这章是关于 RHTML 模板。

Rails 2.0 一个重要的改变,就是生成HTML文件的模板文件的扩展名变为 .html.erb 。更正确的说法是,.erb 的部分显示了模板系统(模板引擎)的名称。例如,使用 HAML 代替 ERB 的场合,将扩展名设为 .html.haml

试一下使用 Rails 的发生器生成控制台。

> script/generate controller top index

确实,app/views/top 目录下生成了名为 index.html.erb 的文件。

也许有人会认为这次的改变没什么用,但是这是 Rails 1.2 开始的 multiview 改革的自然的结果。但是关于这点更深入的探讨我们下回再说。

关于布局与局部模板,同样使用扩展名 .html.erb 。生成下面的app/views/layouts/application.html.erb 文件,并在浏览器上显示。

<html>
<head>
  <title>Title</title>
</head>
<body>
  <%= yield :layout %>
  <hr />
  <p>Powered by Ruby on Rails.</p>
</body>
</html>

页面下部出现水平线与“Powered by Ruby on Rails”。OK了。

照之前的,即使在 Rails 2.0 中也能使用具有 .rhtml 扩展名的模板文件,即使要将用1.x 环境下开发的程序放到 2.0 环境,也没有必要改变扩展名。如果希望改变,就使用下面的 Rake 任务。

namespace 'views' do
  desc 'Renames all .rhtml views to .html.erb'
  task 'rename' do
    Dir.glob('app/views/**/*.rhtml').each do |file|
      puts `svn mv #{file} #{file.gsub(/\.rhtml$/, '.html.erb')}`
    end
  end
end

将此进行适当的命名(例:rename.rake),放在 lib/tasks 目录下,并执行

rake views:rename

的话,便将匹配文件的扩展名一起改变。但是,前提是设定这个任务在 Subversion 管理源代码。想直接改变文件名的时候,将第 5 行做如下改变。

      puts `mv -v #{file} #{file.gsub(/\.rhtml$/, '.html.erb')}`

此外,这个 Rake 任务参考了 Rails 2 Upgrade Notes

今天就到这里。

(2007/12/22)