ror-tutorial-v2-notes

生成contoller

如何生成controller

使用 generate来自动生成controller:

[fangpeng@vps1 rails.pureage.info]$ rails generate controller StaticPages home help 
      create  app/controllers/static_pages_controller.rb
       route  get 'static_pages/help'
       route  get 'static_pages/home'
      invoke  erb
      create    app/views/static_pages
      create    app/views/static_pages/home.html.erb
      create    app/views/static_pages/help.html.erb
      invoke  test_unit
      create    test/controllers/static_pages_controller_test.rb
      invoke  helper
      create    app/helpers/static_pages_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/static_pages.coffee
      invoke    scss
      create      app/assets/stylesheets/static_pages.scss

可以看到,项目目录里有如下变化:

[fangpeng@vps1 rails.pureage.info]$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   config/routes.rb
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    app/assets/javascripts/static_pages.coffee
#    app/assets/stylesheets/static_pages.scss
#    app/controllers/static_pages_controller.rb
#    app/helpers/static_pages_helper.rb
#    app/views/static_pages/
#    test/controllers/static_pages_controller_test.rb
no changes added to commit (use "git add" and/or "git commit -a")

如何撤销controller

从上面我们可以看到,在使用generate生成controller后,一方面增加了一些文件,另一方面修改了config/routes.rb文件。那么如何撤销呢?

使用destroy可以达到该目标。

[fangpeng@vps1 rails.pureage.info]$ rails destroy controller StaticPages home help
      remove  app/controllers/static_pages_controller.rb
       route  get 'static_pages/help'
       route  get 'static_pages/home'
      invoke  erb
      remove    app/views/static_pages
      remove    app/views/static_pages/home.html.erb
      remove    app/views/static_pages/help.html.erb
      invoke  test_unit
      remove    test/controllers/static_pages_controller_test.rb
      invoke  helper
      remove    app/helpers/static_pages_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      remove      app/assets/javascripts/static_pages.coffee
      invoke    scss
      remove      app/assets/stylesheets/static_pages.scss

此时发现文件都复原了:

[fangpeng@vps1 rails.pureage.info]$ git status
# On branch master
nothing to commit, working directory clean

如何撤销rake db:migrate

与destroy类似,在执行了rake db:migrate更新数据库后,如果想撤销更新,可以使用:

rake db:rollback

要想使数rake db:migrate VERSION=0据库回滚到最开始的状态,可以使用:

rake db:migrate VERSION=0

VERION可以更换为其他数字

重新生成controller

由于上面为了演示,将controller撤销了,下面重新生成:

[fangpeng@vps1 rails.pureage.info]$ rails generate controller StaticPages home help 
      create  app/controllers/static_pages_controller.rb
       route  get 'static_pages/help'
       route  get 'static_pages/home'
      invoke  erb
      create    app/views/static_pages
      create    app/views/static_pages/home.html.erb
      create    app/views/static_pages/help.html.erb
      invoke  test_unit
      create    test/controllers/static_pages_controller_test.rb
      invoke  helper
      create    app/helpers/static_pages_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/static_pages.coffee
      invoke    scss
      create      app/assets/stylesheets/static_pages.scss

访问home和help页面

在生成了StaticPages controller后,在浏览器中访问: http://rails.pureage.info/static_pages/home和http://rails.pureage.info/static_pages/help ,结果如下所示.

注意,在上面执行

[fangpeng@vps1 rails.pureage.info]$ rails generate controller StaticPages home help

时,我们是创建了一个名为StaticPages的contoller,而home和help分别是这个controller的两个action.

手动添加一个页面

如上所示,我们现在有两个页面home和page,他们对应StaticPages这个controller的两个action. 通过/static_pages/home和/static_pages/help可以访问到。

现在我们要手动添加一个页面/static_pages/about的话,该怎么做呢?

首先,添加一个about的路由:

[fangpeng@vps1 rails.pureage.info]$ vim config/routes.rb

增加如下内容:

get 'static_pages/about'

然后,为StaticPages控制器增加一个about的action:

[fangpeng@vps1 rails.pureage.info]$ vim app/controllers/static_pages_controller.rb

内容如下:

class StaticPagesController < ApplicationController
  def home
  end

  def help
  end

  def about
  end
end

最后,为about动作添加一个模板,新建文件如下:

[fangpeng@vps1 rails.pureage.info]$ vim app/views/static_pages/about.html.erb

内容为:

<h1>About Us</h1>
<p>
  The <a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
  is a project to make a book and screencasts to teach web development
  with <a href="http://rubyonrails.org/">Ruby on Rails</a>. This
  is the sample application for the tutorial.
</p>

此时,我们访问/static_pages/about页面如下图: