Ruby on Rails 添加页面

来源:互联网 发布:意大利黑手党知乎 编辑:程序博客网 时间:2024/05/16 16:22

本文主要介绍怎样用静态页面在 Ruby on Rails 中是如何生成并返回给浏览器的

首先,我们需要生成一个controller,起名 static_pages:

$ rails generate controller static_pages

执行这个命令会在 app/controller 目录下生成一个名叫static_pages_controller.rb的文件,它的内容如下:

class StaticPagesController < ApplicationControllerend

他负责定义各个页面的行为。此时,static_pages服务器上的一个目录,接下来,我们就要在这个目录中创建各个页面。例如,我们想要添加一个叫home的静态页面,按以下步骤执行。

1. 在route中添加home的记录。

打开config/routes.rb文件,添加如下代码:

get 'static_pages/home'

get 是一个十分常见的 HTTP 请求方法,这里的意思是“给我返回 static_pages/home页面”。

2. 在controller中定义有关home的action

打开app/controller/static_pages_controller.rb文件,添加以下代码:

def homeend

上一步中在route.rb中添加的记录会匹配到home的action。如果定义 action 的函数是空的,那么直接返回home页面。

3. 创建home静态页面

app/views/static_pages目录下新建一个文件,命名为home.html.erb。你完全可以把它当成html页面来写,只不过你也可以在里面插入 ruby 代码。文件后缀的erb 代表embeded ruby。这里有一个例子:

<% provide(:title,"Home")%><h1>Sample App</h1><p>  This is the home page for the  <a href="http://www.railstutorial.org/">Ruby on Rails Tutorial</a>  sample application.</p>

<% %>之间的就是嵌入的 ruby 代码。我们注意到上面的页面代码并没有包括一些html页面需要的元素,比如 DOCTYPE 声明,<title>,<head>标签等等。这是因为这些东西对于每个页面来说都是重复的内容,而 rails 就是要尽量避免重复的工作。那这些东西到底去哪了呢?

app/views目录下面还有一个叫layouts的目录,里面有一个文件叫application.html.erb,这其实是 rails 用来处理重复页面结构所用的布局文件。它的内容大概是这样:

<!DOCTYPE html><html>  <head>    <title><%= yield(:title)%> | Ruby on Rails Tutorial Sample App</title>    <%= csrf_meta_tags %>    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>  </head>  <body>    <%= yield %>  </body></html>

这样就减少了重复的代码。我们所创建的每个页面实际上是套用了这个布局。

Rails 本身还集成了测试功能。测试保存在test目录下。前面执行过的generate命令为我们在test/controllers目录下创建了一个测试文件。测试的具体写法在这里不讨论。测试文件的内容大概是这样的:

require 'test_helper'class StaticPagesControllerTest < ActionDispatch::IntegrationTest  def setup    @base_title = "Ruby on Rails Tutorial Sample App"  end  test "should get root" do    get root_url    assert_response :success  end  test "should get home" do    get static_pages_home_url    assert_response :success    assert_select "title", "Home | #{@base_title}"  end  test "should get help" do    get static_pages_help_url    assert_response :success    assert_select "title", "Help | #{@base_title}"  end  test "should get about" do    get static_pages_about_url    assert_response :success    assert_select "title", "About | #{@base_title}"  end  test "should get contact" do    get static_pages_contact_url    assert_response :success    assert_select "title", "Contact | #{@base_title}"  endend

想要运行测试就直接在终端中输入:

$ rails test

P.S. 运行 rails generate 时没反应,或运行 rails test时报有bug,尝试关掉spring,用

$ spring stop

然后再运行。

0 0
原创粉丝点击