Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74277
  • 博文数量: 29
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 345
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-01 17:24
文章分类
文章存档

2011年(1)

2008年(28)

我的朋友
最近访客

分类:

2008-10-01 17:44:12

 

1、用户导航到我们应用程序。我们要做是使用本地URL

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,因为缺省模板的名字是相应的“动作”名。

See You Later!

Goodbye!

It was nice having you here.

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

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

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

…..

Say GoodBye!

同样,goodbye.rhtml是这样。

….

Say Hello!

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

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

Hello, Rails!

Hello from Rails!

It is now <%= @time %>.

Time to say

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

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页。

See You Later!

Goodbye!

It was nice having you here.

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

4.4 我们刚才做了些什么

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

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

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

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

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

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

阅读(506) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~