使用 ActiveScaffold 增强 Ruby on Rails 的功能(2)
- UID
- 1066743
|
使用 ActiveScaffold 增强 Ruby on Rails 的功能(2)
Rails scaffold 现在我们已经充实了模型,接下来可以在上面放一个 Web 界面。Rail 提供了一个 “scaffold” 生成器,它可以为某个给定模型生成一组基本的 CRUD 页面。下面的命令用来为这个模型创建标准的 Ruby scaffold:即一个具有一组 CRUD 方法和一组对应的模型 HTML 视图的控件。
清单 4. 生成标准的 Rails scaffold1
2
| script/generate scaffold user
script/generate scaffold organization
|
scaffold 生成器有几个重要的限制:
- 没有关系支持:创建模型实例就意味着只能编辑实例的基本属性。如果模型需要定义一个关系(例如,Project 需要选中所有的 Organization),就需要手工修改页面将这个域添加到窗体上。
- 不能往返:对于模型反复进行的更改不支持 “往返” 操作,这是因为所生成的代码是静态的。一旦代码被修改之后,就不能在不丢失所做更改的情况下重新生成 scaffold 了。
- 缺少样式支持:所生成的页面都是最基本的黑色和白色,只有最少量的 CSS 支持。不对基本的 HTML 标记使用样式就不支持通过 CSS 使用皮肤功能。
同时具有前两个限制说明 scaffold 实际上更像一个玩具,而不像一个有用的工具。图 1 给出了 Rails 提供的默认 scaffold。
图 1. 标准的 Rails scaffold Rails 还包括了 dynamic scaffold,它实际上提供了相同的代码支持,而不需要提前生成控件代码。这并没有给您带来太多好处 — 因为大部分代码都位于 HTML 视图中,而且仍然需要视图代码。通过将 scaffold 方法添加到控件类中可以启用动态 scaffold。
清单 5. 添加 Rails 的标准 scaffold1
2
3
| class UsersController < ApplicationController
scaffold :user
end
|
小心!
如果标准的 Rails scaffold 代码与 ActiveScaffold 一起使用,就可能会出现问题。在切换到 ActiveScaffold 之前,请确保您已经清除了所有的 scaffold 控件和视图代码。
ActiveScaffold 默认显示 ActiveScaffold 为模型提供了一个更加有用的 UI。scaffold 的上述 3 个问题都已解决。首先,我们需要修改控件来使用 ActiveScaffold scaffold:
清单 6. 添加 ActiveScaffold scaffold1
2
3
4
| class UsersController < ApplicationController
active_scaffold :user
layout "activescaffold"
end
|
然后为所有 ActiveScaffold 页面添加标准布局(将下面的代码放入 app/views/layouts/activescaffold.rhtml 中):
清单 7. ActiveScaffold 标准布局1
2
3
4
5
6
7
8
9
10
11
12
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>My Application</title>
<%= javascript_include_tag :defaults %>
<%= active_scaffold_includes %>
</head>
<body>
<%= yield %>
</body>
</html>
|
现在用户清单看起来就好多了:
图 2. 标准的 ActiveScaffold scaffold 这个默认显示可以很好地用于快速构建原型或开发。然而,与所有默认情况类似,稍加定制就可以使它更加适合于您的特定需求。 |
|
|
|
|
|