3.1.1 真正的静态页面
让我们从真正的静态页面开始学习吧,回顾一下第1.2.5中关于每一个Rails程序一开始就就是一个非常小的程序(主要是Rails
脚本的功劳,例如生成器)而且都有一个默认的欢迎页面(地址:http://localhost:3000/ (图1.3).)
(图1.3 第一章的图片,rails程序创建时默认的欢迎页面。)
图片3.2 public/index.html文件(默认欢迎页面)
看一下上图中代码,我们学习一下这个页面是从哪里来的。因为这个页面把样式直接包括进去,所以看起来有点乱,但是他的主要功能是:Rails将会把public文件夹下面的任何文件提供给浏览器。其中index.html文件是非常特别的,当你没有指定url地址的时候(http://localhost:3000/)他就是默认提供给浏览器的页面。当然你也可以包含它(http://localhost:3000/index.html)是没有区别的。
正如你所想的,如果我们喜欢,我们可以吧我们自己的静态网页像index.html文件一样放在public目录底下。所为
例子,让我们创建一个问候用户的页面(代码3.3)。
$ mate public/hello.html
代码3.3 问候的HTML页面
<!DOCTYPE html>
<html>
<head>
<title>Greeting</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
在代码3.3中,我们看到一个典型的HTML文件:在头部声明document type(或者doctype),告诉浏览器HTML的
版本(我们使用
HTML5),在HTML的head中,我们设置“Greeting”作为title标签,在Body里面,我们在一个段落标签里放入了“Hello,world!”(上面的缩进可以不必理会,HTML的空格和tab键没影响。加上必要的排版可以让我们的文档更方便查看。)。好了,和上面说的一样,我们可访问地址:
http://localhost:3000/hello.html,Rails将会直接将页面返回给我们(图3.3)。
(HTML文本的title在浏览器的顶部。)
图3.3我们自己的静态网页
上述页面只是为了示范而已。它可不是我们程序的一部分,所以我们应该删除掉它。
$ rm public/hello.html
我们先把index.html文件放一边,当然我们最终是要删除掉它的,我们可不想我们程序的根目录总是如图1.3所示那样的Rails默认页面。我们将会在第5.2节中学习如何让我们的地址“http://localhost:3000/”不指向public/index.html
3.1.2 Rails静态页面
可以返回静态页面是值得让人兴奋地,但是这对于开发一个动态
web程序的来说并不是很有用。在这一节,我们学习创建动态页面的第一步:创建一些Rails的action方法,这些方法定义URL的能力比静态页面强很多。Rails的action方法在控制器里。第二章惊鸿一瞥的REST
架构,我们将要在第六章深入的学习。本质上,controller是一组网页页面(可能是动态)的容器。
我们从回忆第1.3.5节中,我们如何使用Git开始,将我们工作的内容单独放在一个分支里面比直接在master分支更值得我们借鉴。如果你使用Git版本控制,你可以运行一下代码
$ git checkout -b static-pages
Rails里面我们可以使用一个Generate的脚本来创建控制器;他的神奇之处就在于我们所要做的只是想一个控制器的名称。
由于我们的这个控制器主要用来处理静态页面,我们就叫他,Pages,而且我们希望给他几个action去响应Home page,contact page,和about page。我们可以在generate 脚本后面更上几个可选的参数作为actions,我们可以看到结果如下:
代码3.4 创建Pages控制器
$ rails generate controller Pages home contact
create app/controllers/pages_controller.rb
route get "pages/contact"
route get "pages/home"
invoke erb
create app/views/pages
create app/views/pages/home.html.erb
create app/views/pages/contact.html.erb
invoke rspec
create spec/controllers/pages_controller_spec.rb
create spec/views/pages
create spec/views/pages/home.html.erb_spec.rb
create spec/views/pages/contact.html.erb_spec.rb
invoke helper
create app/helpers/pages_helper.rb
invoke rspec
(注意,我们使用rails generate rspec:install来安装了Rspec所以,控制器自动在spec目录底下,生成了Rspec的测试文件。)。在这里,我故意遗忘了about page,我们可以在下一节3.2中学习如何手动添加它。
代码3.4中生成控制器的时候已经更新了routes的文件(位于config/routes.rb),Rails用该文件来查找URL和网页之间的对应关系。这是我们第一次遇到config这个文件夹,所以我们应该来快速的过一遍这个文件夹(如图3.4)。这个文件夹是rails放置一些配置文件的目录,故称其名。
图3.4 实例程序中config文件夹的目录内容
由于我们生成了home和contact的action方法,所以,routes文件已经为每一个action配置好了规则,如代码3.5:
代码3.5 page控制器中home和contact的路由规则
config/routes.rb
SampleApp::Application.routes.draw do
get "pages/home"
get "pages/contact"
.
.
.
end
规则:
引用