如何使用活动脚手架(用例和好处)

 在进一步学习使用活动脚手架之前,你可以先看看我们在shanghaionrails上做的介绍

好了,我们已经安装好了ActiveScaffold这个插件了。它看起来很酷,对吗?你可能要问,那么它能帮我做什么呢? 我从哪里开始看这个文档呢?好,现在就让我们更深入一些。

用例

在Rails社区,对于“脚手架(scaffold)” 这个词有一些不好的认识。一方面,会有一些人告诉你脚手架只是用来“帮你启动”的,一有时间你就应该把它们替换成你自己定制的东西。而另一方面,在你的意识深处总有一个声音要告诉你,脚手架可以变得更好,更聪明,更实用。但是那些人一直告诉你,不,脚手架太简单了,它不可能更好更聪明,而你的的确确需要定制你自己的东西。这两种声音我们都同意。 Rails自带的脚手架的确不能真的派用场。但是,在很多应用中,一些类似于脚手架一样的东西可以提供一个通用模式。我们假设这种东西比脚手架更聪明更酷,有更多的功能。而这正是活动脚手架的愿景所在。所以,活动脚手架是通用模式的一个解决方案。 那么,在应用程序中,这个模式通常会出现在哪里呢?可以怎样(或者说,应该怎样)使用活动脚手架呢?

搭建原型

这也是Rails内建的脚手架的用处。而活动脚手架更擅长,因为它智能的配置和定制选项使你的原型更棒。这一切是那么简单,你可能都会舍不得丢掉原型来做你自己的事情。最后我们真的需要澄清:每个应用程序都有不同的需要,如果活动脚手架不能适应这些需要,你必须替换掉(或者配置/修改)它。

管理界面

你的web应用程序很酷,因为只有经过定制和设计,才能提高最终用户的体验 。但是对于后台管理,你往往不需要花同样多的精力。活动脚手架在这里就会表现得很完美,你只需要把一些脚手架凑在一起,就可以很简单地创建一个后台管理。这样你就可以把时间和精力花在提高用户访问量和盈利能力上了。当然,活动脚手架不可能满足你的所有后台管理需求。有时你需要花些精力定制出一个更好的工作流。但是最后,往往你需要在后台管理应用投资很多时间,而活动脚手架可以帮助你搭建一个功能丰富、真实可用的后台管理…并且完全免费。

嵌入式,小物件风格

好了,可能你已经在后台界面中用上了活动脚手架。或者可能用不上,但是你在设计一个网站的时候,需要在网页上嵌入一个小物件,显示某个数据表中的一些数据。幸运的是,嵌入式活动脚手架可以帮你做到,并可以同时根据上下文限制显示出来的数据。比如,你的网站是关于NBA的,每个球队都有一张网页。数据库中有一个表是所有球员的名单,现在你想在球队网页上显示本球队的球员花名册。活动脚手架可以帮你做到,而且非常顺畅,只需要在你的页面中加入一个<%= render :active_scaffold => 'players', :constraints => {:team_id => 5} -%> 即可。哈哈!方便花名册!好了,但是你想做一些定制,比如显示每位球员的照片。没问题,覆盖你的”picture”字段,不要让它显示没用的文件名,替换成缩略图。好了,现在你想禁止创建和编辑,最终用户当然不能编辑这个列表。这也很简单,用活动脚手架提供的权限方法(authorization methods)禁止除登录管理员以外所有人的创建和编辑权限。

重数据的应用程序

让我们来面对这种情况:有时你的应用程序只是需要一个管理数据的方法,需求非常简单。虽然这可能不是这种应用程序的全部,但是你需要这种方法。比如,只需要让用户登录,在数据库的表中修改一些记录;或者,一个卖东西的商业网站,让人们浏览商品目录放入购物车。在这种情况下,你的控制器里面除了活动脚手架,基本上不需要别的东西了。来吧!免费使用这些活动脚手架提供的好处吧。你只需为你的情况做些调整即可。

享受生成器的好处,仍能与时俱进

要一分为二地看待生成器(Generator),有时候它的坏处很要命。你有没有试过修改生成出来的代码?没有,对不对?生成器的理念是:他们帮你启动,而剩下的事你要自己掌管。这很酷,因为你可以调整或者定制,直到找出最终的解决方案。而对于像活动脚手架这样的插件来讲,你可以享受我们不断加入的新功能;你可以得到bug修正以后的补丁;你可以不用掌管这些代码,而由我们代劳。但是…但是你还需要调整或者定制,超越活动脚手架提供的内建功能,做出自己的东西来。很好,我们也希望你能超越内建功能。活动脚手架可以给你生成器所能提供的可定制性,而无需忍受维护的烦恼。我们称之为“覆盖”。那么你能覆盖什么呢?别忘了这是Ruby的特性,所以其实你可以覆盖任何东西,但是我们说的覆盖不止与此。

字段覆盖

你可以覆盖默认的列表显示。也许你想换一种格式显示日期。也许你不想显示文件字段里一串讨厌的文件名,而以一幅真正的图片来代替。 也许你想为有些显示加上点儿颜色,比如将小于零的数字显示成红色。或者也许你想加上一个inline editing,这样人们就不用打开一个表单来修改东西了。这些想法可以用字段覆盖来实现。你可以在辅助方法文件中以约定方式定义一个方法,活动脚手架就会发现并使用它来代替默认的字段渲染方式。

表单覆盖

好了,字段覆盖作用于列表,但是如果你想定制创建或者修改,该怎么办呢?如果你想为某个字符串长度的字段使用<textarea>,该怎么办呢?或者你想创建一个特定的<select>框,用JavaScript来动态改变另一些<select>框里的选项。同样,你可以在辅助方法文件中以约定方式定义一个方法,活动脚手架会基于此方法来渲染表单项。

模板覆盖

你可能想指出有些地方你需要定制整个用户界面。只能修改一个字段或者一个表单项不能满足所有的需求。你需要一个功能我们完全没有,而你需要一种特别的效果来开发应用程序。 这没问题,创建一个模板把我们的覆盖掉好了。活动脚手架会给它最高的优先级,这样你就会得到一个完全定制的表单样式。(当然,你创建的第一个模板覆盖可能就是_show.rhtml。我们的显示视图的确很烂,你不能指望一个通用插件能做得很漂亮,所以当然应该定制一下)

动作钩子

The next thing you realize is that you don’t need to change something that’s already there, you need to add a whole new action. You need a link on each row that activates a planetary defense system. You need a link on the page that makes it snow in Mexico. Well, um, ok. I guess. You can go ahead and use the same system ActiveScaffold uses to tie all of its actions into the List. You can add your own actions, and hook into your own custom controller logic. Go for it.

Navigating Documentation

But where can you find out about all these cool features? What is a “method with a conventional name”, and which helper file do you put the method in? And why didn’t we go into more detail on this stuff or at least make links everywhere like in Wikipedia?Meh, maybe we got lazy with the links, but the information you need is right here on the website. The question is how to find it. How is the documentation organized, and how can you find what you need? And what if the docs don’t answer your question?The first thing to find is the search box. Use it. Embrace it. If the navigational structure doesn’t make sense to you, just bypass it and find what you need with a search. The next thing you want to do is read some of the tutorials. These are topical articles that explain how to accomplish common tasks. Check out the FAQ for some other mini-tutorials.Or go ahead and browse the actual documentation. This is a more technical segment of documentation, mostly about the API of the different pieces of ActiveScaffold. So to find options for configuring the List action, check out the API: List page. We’ve tried to sprinkle examples throughout the API, but the emphasis there is more on completeness than friendliness (which is what tutorials are for).And finally, we’ve got an entire page on how to get help. Check it out. Join the forums, get involved. We’d love to have you!