首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 ActiveScaffold 增强 Ruby on Rails 的功能(2)

使用 ActiveScaffold 增强 Ruby on Rails 的功能(2)

Rails scaffold 现在我们已经充实了模型,接下来可以在上面放一个 Web 界面。Rail 提供了一个 “scaffold” 生成器,它可以为某个给定模型生成一组基本的 CRUD 页面。下面的命令用来为这个模型创建标准的 Ruby scaffold:即一个具有一组 CRUD 方法和一组对应的模型 HTML 视图的控件。
清单 4. 生成标准的 Rails scaffold
1
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 的标准 scaffold
1
2
3
class UsersController < ApplicationController
  scaffold :user
end




小心!
如果标准的 Rails scaffold 代码与 ActiveScaffold 一起使用,就可能会出现问题。在切换到 ActiveScaffold 之前,请确保您已经清除了所有的 scaffold 控件和视图代码。
ActiveScaffold 默认显示 ActiveScaffold 为模型提供了一个更加有用的 UI。scaffold 的上述 3 个问题都已解决。首先,我们需要修改控件来使用 ActiveScaffold scaffold:
清单 6. 添加 ActiveScaffold scaffold
1
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 这个默认显示可以很好地用于快速构建原型或开发。然而,与所有默认情况类似,稍加定制就可以使它更加适合于您的特定需求。
返回列表