Agile Web Development with Rails 翻译(七)

Agile Web Development with Rails 翻译(七)


1、用户导航到我们应用程序。我们要做是使用本地URLhttp://localhost:3000/say/hello

2Rails分析URLsay部分是“控制器”的名字,所以Rails创建一个RubySayController的新实例(这个类在app/controllers/say_controller.rb中被找到)

3URL路径的下个部分,hello,标识了一个“动作”。Rails调用“控制器”内这个名字的方法。这个“动作”方法创建一个新的Time对象来持有当前时间,并放入到实例变量@time中。

4Rails查看用于显示结果的模板。它搜索目录app/view来查找与“控制器”同名的子目录,然后在子目录中查找文件名hello.rhtml

5Rails通过ERb来处理这个模板,运行所有被植入的Ruby代码,并用“控制器”设置的值替换它。

6、发送结果给浏览器,Rails完成对这个请求的处理。

这并不是全部故事—Rails给你很多机会来重写基本工作流(稍后我们会看看这些优点)。现在,我们显示了配置约定,Rails的基础部分。通过提供方便的缺省值和应用某些约定,Rails应用程序典型地使用了很小的,甚至可无的额外配置这是将它们自己编织在一起的最自然的方式。

 

4.3 将页面链接在一起

 

未经加工的Web应用程序只有一个页面。让我们看看如何添加其它的页面到Hello,World!应用程序中。

通常,你的应用程序内每个页面的风格是对应于一个单独的“视图”。在我们的例子中,我们也将使用一个新的“动作”方法来处理页面(尽管并不总是这样,像在本书稍后看到的)。我们给两个“动作”使用同样的“控制器”。我们并不是强迫用户使用新的“控制器”。

我们已经知道如何添加一个新的“视图”和“动作”给Rails应用程序。要添加“动作”,我们在“控制器”内定义个新方法。让我们称这个新方法为goodbye。我们的“控制器”现在看起应该这样。

class SayController < ApplicationController

def hello

@time = Time.now

end

def goodbye

 

end

 

end

下一步,我们必须在app/views/say目录内创建一个新“模板”。这次称它为goodbye.rhtml,因为缺省模板的名字是相应的“动作”名。

<html>

<head>

<title>See You Later!</title>

</head>

<body>

<h1>Goodbye!</h1>

<p>

It was nice having you here.

</p>

</body>

</html>

再次启动浏览器,但这次是指出我们的新“视图”,使用这个URL http://localhost:3000/say/goodbye。你应该看到图4.6样的东西。

 

 

现在我们需要将两个页面连在一起。我们要在hello页面内放个链接,指向goodbye页面,反过来也是一样。我们可能想用些适当的按钮,但现在我们只有超链接,hyperlinks

我们已经知道Rails使用一个约定来解析URL到一个目标“控制器”内,并使用这个“控制器”内的一个“动作”。所以简单的途径是让我们的URL符合这个约定。文件hello.rhtml将包含下面这些。

<html>

…..

<p>

Say <a href="/say/goodbye">GoodBye</a>!

 

</p>

</html>

同样,goodbye.rhtml是这样。

<html>

….

<p>

Say <a href="/say/hello">Hello</a>!

 

</p>

</html>

这种方式的确可以工作,但是它还有个缺点。如果我们想移动我们的应用程序到Web服务器的不同目录时,这个URL就不再有效了。它也把RailsURL格式编码进我们的代码中;或许将来Rails会修改这个格式。

幸运地,我们不会遇到些危险。Rails带有一组“帮助”方法,它们可以使用在“视图”模板内。这儿,我们将使用“帮助”方法link_to(),它为“动作”创建一个超链接。使用link_to()hello.rhtml变成这样。

<html>

<head>

<title>Hello, Rails!</title>

</head>

<body>

<h1>Hello from Rails!</h1>

<p>

It is now <%= @time %>.

</p>

<p>

Time to say

<%= link_to "GoodBye!", :action => "goodbye" %>

 

</p>

</body>

</html>

ERb<%=…%>序列内调用link_to()。这创建了一个调用goodbye()“动作”的URL连接。它的第一参数是要显示在超链接内的文本,下一个参数告诉Rails生成指向goodbye“动作”的连接。不需要我们指定“控制器”,当前的“控制器”会被使用。

让我们停一下,想想link_to()的最后一个参数。我们写

link_to "GoodBye!", :action => "goodbye"

:action部分是Ruby的符号。你可想冒号:的意思是某物的名字,所以,:action的意思是某物的名字是action=>"goodbye"将字符串goodbye与名字action关联起来。这可有效地使我们可以为方法使用关键字参数。Rails扩展了个功能的用途无论何时,方法都可接受一定数量的参数,并且这些参数一部分是可选的,你可以使用关键字参数功能来给出这些参数的值。

好了,回到应用程序中。如果我们指定浏览器在我们的hello页,它现在将包含指向goodbye页的连接,像图4.7

 

 

我们在goodbye.rhtml内也做出相应修改,连接它提向最初的hello页。

<html>

<head>

<title>See You Later!</title>

</head>

<body>

<h1>Goodbye!</h1>

<p>

It was nice having you here.

</p>

<p>

Say <%= link_to "Hello", :action=>"hello" %> again.

 

</p>

</body>

</html>

 

4.4 我们刚才做了些什么

 

本章,我们构造了一个玩具应用程序。做了些:

1 如何创建一个新Rails应用程序和如何在这个应用程序内创建个新的“控制器”。

2 Rails 是如何映射请求给你的代码调用的。

3 如何在“控制器”内创建动态内容并显示在“视图”模板内。

4 如何将页面连接在一起。

这是最根本的基础。现在让我们构造个真实的应用程序。

 

到现在为止的故事

 

让我们简短地回忆一下我们当前应用程序是如何工作的。

 

2006年4月16日更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值