个人翻译的,水平有限,请多包涵。转载请注明出处,谢谢合作!

-------------------------------------------------------------------------------------  

Rails3安装方法暂不翻译,网上有很多,翻译从2.1节开始

这是我博客里的一篇安装方法介绍:http://hi.baidu.com/ballad1939/blog/item/bc8d28cf0bdfaae052664f19.html

 

2.1创建一个新应用

搭建好Rails平台,你就得到了一个新命令行工具Rails,它用于建造你写的Rails应用。

为什么我们需要这工具呢?为什么不能使用自己最爱的工具创建代码呢?当然可以这样,说到底Rails只是基于Ruby写成的代码。但是除了用最简短明确的命令行让我们的应用跑起来之外,Rails还有一些列的魔法。要施展这些魔法,Rails需要找到你应用中的各种组件,这意味着我们必须创建明确的路径结构,把代码放入合适的位置,正如之后我们看到的那样(在18.1节,“事情是怎样运作的”,258页)。Rails命令行可以轻松为我们创建这些由标准Rails代码构成的路径。

创建你的第一个Rails应用, 打开你的命令行窗口,在你的文件系统中找个目录做应用的路径。在本案中,我们将在名叫work的夹子中新建项目,然后用rails命令在该路径下创建一个叫demo的应用,但请小心,若该路径下已存在一个叫demo得文件夹,那么你将被问及是否重写已存在的文件。(注意:若你想明确使用哪个Rails版本的话,如1.4节描述的那样,“选择一个Rails版本”,第28页。)

看见这些命令说明你已创建了一个demo路径,进入该路径并显示其中的内容(在Unix上使用ls,在windows上使用dir),你将看见该路径的子目录。

我们可以从其中任何一个路径开始,但我们现在必须忽略其中大部分内容。在本章,我们仅使用它们中的一个,就是app文件夹,我们将在其中写应用程序。

目前,你唯一要做的就是启动一个独立的web服务器,该服务器可以让我们新建的Rails应用跑起来。所以先不要做别的,让我们把demo应用跑起来再说。

哪个先跑起来取决于你事先安装了那种服务器,WEBrick是个纯Ruby的服务器,支持Ruby1.8.1及以上版本,因此目前已被普遍使用,然而,若你系统上安装了另外一个web服务器,并且Rails又可以找到的话,那么比起WEBrick,Rails可能更倾向于使用它。你可以通过如下命令强制Rails使用WEBrick:

在启动服务器的最后一条指令上,我们看到了在3000端口启动了一个web服务,地址0.0.0.0意味着WEBrick将接受任何端口的连接,在Dave的OS X系统上,这意味着本地端口(127.0.0.1)和LAN连接都可以。在浏览器上输入http://localhost:3000来访问应用,图2.1中我们可以看到结果:

再看一眼启动服务的窗口,可以得到启动应用的轨迹,我们就让服务器在这个窗口中运行。

然后我们写一个程序代码让它运行在浏览器上,我们依然使用这个控制台去追踪接下来的请求,当你想结束应用的时候,按CTRL+C就可以让WEBrick停止运行(现在先别忙按,我们还要用它呢)。

我们要让一个新应用跑起来,但我们还没写自己的代码呢,现在就让我们改变这个局面。

2.2 Hello Rails!

无济于事,我们现在只写了个hello world程序来使用新系统。让我们写个简单的应用送给浏览器一个小礼物,完成后,再用现在时间与链接作点缀。

如我们将在第三章“Rails应用架构”,第48页所看到的那样,Rails是个Model-View-Controller框架,Rails从浏览器接受请求,根据请求寻找控制器,然后从控制器中调用方法。之后,控制器调用特定视图给用户呈现结果。Rails管理着大部分联接这些动作的管道,在写“Hello World”这个简单应用时,我们需要一个控制器和一个视图的代码,并且要用一个路径去联接它们。目前不需要模型代码,因为这里不做任何数据处理。现在让我们从控制器开始。

与我们使用Rails命令行创建新应用一样,我们使用generator脚本在项目中创建控制器。该命令行叫“Rails generate”。

若要创建一个名为Say的控制器,我们需确保已处在demo目录下来运行命令,然后传入我们想创建的控制器名称,以及想要该控制器支持的动作:

当Rails generate命令为你的应用增加Ruby脚本或路径的时候,它会记录下检测的文件与路径。现在我们来看看它生成的一个脚本,待会儿再看看html.erb格式的文件。

我们要看的第一个源文件是控制器,你可以在app/controllers/say_controller.rb路径下找到它。让我们看看:

代码很少,对吗?SayController是ApplicationController的一个继承。所以它自动继承了某些默认方法。

这些代码能干吗?现在什么也干不了,我们只有一个叫hello的空方法,想知道这方法为何要这么命名吗?让我们来看看Rails控制器是如何发出请求的。

Rails与URLs请求

与其他Web应用类似,Rails应用也是通过URLs方式显现给用户的。当你在浏览器中输入它的URL,你就是与该应用的代码交谈,然后应用将返回一个响应内容给你。

让我们来试试看。在浏览器中将URL定位到:http://localhost:3000/say/hello,你将看到类似图2.2中的情况。(注意在开发环境中,我们在应用名之前不添加任何路径,因为我们是直接连通到控制器中的。)

第一个Action

此时,我们不仅看见URL是否与控制器连接上,也看到Rails为我们下一步工作,即告诉Rails去做什么,指明了方向。

这就是视图的来源。想起我们运行脚本新建控制器的时候吗?我们用命令行创建了六个文件,并为应用增加了一个新目录。那目录包含了控制器视图的模板本件,在本案中,我们创建一个名为say的控制器,所以视图将显示在app/views/say目录下。

补充一句,Rails将在与Action操作同名的文件中寻找模板。在本案中,这意味着我们将在app/views/say目录下替换一个名为hello.html.erb的文件。(为什么是html.erb?我们待会儿再解释。)现在让我们来看看它的HTML代码:

保存hello.html.erb文件,刷新浏览器窗口,你将看到我们友好的问候:

现在,我们在Rails应用结构树中已经看了两个文件,我们看了控制器,并且修改模板在浏览器中呈现一个页面。这些文件在Rails的层次体系中位于标准位置,控制器在app/controllers中,视图位于app/views中。请看图2.3。

 

让它动起来

到目前为止,我们的Rails程序都很没什么意思,它只显示一个静态的页面。若想使它更生动一些,让我们在刷新页面的时候,在页面上显示现在时间吧。

要想完成这件事,需要我们在视图模板中做一些改动,现在需要以String类型将时间包含进来,这就引发了两个问题:首先,我们怎样把动态内容加入模板?第二,我们从哪里得到时间?

 

动态内容

用Rails构建动态模板有许多方法。在这里我们将采用最常见的办法,就是在模板中嵌入Ruby代码。这是为何我们将模板命名为hello.html.erb的原因,html.erb后缀告诉Rails可以使用ERB系统扩展内容。

ERB是在安装Rails过程中产生的一个过滤器,可以让.erb文件和输出转换形态。输出文件在Rails中通常是HTML文件,但也可以以任何形式存在,普通内容通过该过滤器时不会发生转变,然而<%=和%>之间的内容会被解析成Ruby代码并加以执行,执行的结果将转为字串类型,其值代替文件中<%=%>的部分。举例来说,改变hello.html.erb文件来显示现在时:

当刷新浏览器窗口的时候,我们看到时间以Ruby的标准格式展现在页面上:

注意,若你刷新浏览器页面,时间将在页面加载时更新,这看起来好像我们真的改变了内容一样。


进一步讨论时间问题

我们最初的问题时为我们的用户显示时间。我们现在知道怎样给应用添加动态数据,我们要确定的第二件事是这里的时间是怎样得到的?

我们已经看到,嵌入一个请求Ruby的Time.now方法在hello.html.erb中运行良好,每次我们进入该页面,用户看到的都是现在时间,而非响应主体。对于这微小的应用来说,这样已经够好了,然而我们还想做点更特别的事儿。我们要将时间的计算移动到Controller中显示,先放着这个简单的视图不管。我们将在controller中改变行为方法,将time值放入名为@time的实例变量中:

在html.erb模板中,我们将用这个实例变量替换输出的时间显示:

然后我们再刷新浏览器窗口,又一次看到了现在时间。这说明控制器与视图之间的交流成功了。为什么我们要找额外的麻烦重新在控制器中设置时间并让它显示在试图中呢?这是个好问题。在这个应用里,这么做并无区别,但若在控制器中使用这个方法,我们就会获益。举例来说,我们在将来可能会扩展这个应用,让它支持不同国家的用户。如果是那样的话,我们需要为时间定位,选择符合用户的时区。这会产生很多的应用级代码,将它嵌入视图层就不合适了。将时间放入controller中显示,会让我们的应用更有弹性,我们可以在controller中改变时区,而不用更新任何采用该模型的视图。时间即是数据,它将由controller供应给视图。当我们介绍模型层的时候,会看到更多有关这部分内容。

posted on 2012-01-19 15:15  Ballad1939  阅读(464)  评论(0编辑  收藏  举报