Ruby1.9.3OnRails3.2入门锦集(2) 创建标准MVC应用

rails的脚手架(rails generator scaffold)可以快速生成应用程序所有MVC相关的文件。如果你需要为一个资源创建一系列的控制器视图模型,那么脚手架就是你需要的工具

 

1. 创建资源

对于一个博客程序,你可以以生成一个Post资源脚手架开始:

 

$ rails g scaffold post name:string title:string content:text
 

 

该命令将为你构建15个文件:

文件 说明
db/migrate/20101122214725_create_posts.rb 创建posts表的迁移任务 (你的文件名称将包括一个不同的时间戳)
app/models/post.rb Post 模型
test/fixtures/posts.yml 用于测试的posts夹具
app/controllers/posts_controller.rb Posts控制器
app/views/posts/index.html.erb posts的首页视图
app/views/posts/edit.html.erb posts的编辑视图
app/views/posts/show.html.erb 显示单个post的视图
app/views/posts/new.html.erb 创建post的视图
app/views/posts/_form.html.erb 用于编辑与新建post的局部表单模板
app/helpers/posts_helper.rb post视图的帮助器
test/unit/post_test.rb post模型的单元测试工具
test/functional/posts_controller_test.rb posts控制器的功能测试工具
test/unit/helpers/posts_helper_test.rb posts帮助器的单元测试工具
config/routes.rb 为posts添加路由信息
public/stylesheets/scaffold.css 脚手架的默认CSS

 

rails generate scaffold 命令产生的其中一个文件就是数据库迁移文件,Migration 是设计用来方便创建和修改数据库的Ruby类。rails使用rake任务来运行迁移。而且 Migration 可以撤销先前应用到数据库内的迁移操作。我们现在来看一下所生成的迁移文件(记住:迁移任务的文件名永远是唯一的):

 

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :name
      t.string :title
      t.text :content

      t.timestamps
    end
  end
end

 

 

下面我们运行数据库迁移任务:

 

$ rake db:migrate

 

rails 将执行数据库的创建任务,并提示已经为你创建了posts表

 

2. 添加超链接

下面我们将在首页添加一个到posts的超链接:

 

<h1>Hello world</h1>
<p><%= link_to 'My Blog', posts_path %></p>

 link_to 标签是rails的内置视图帮助器的功能之一,它根据参数创建一段超链接代码

 

现在你可以在浏览器查看博客了,

打开 http://localhost:3000 点击超链接:

 

 

rails将转到posts控制器的index方法,现在数据库里还没人任何记录,点击 New post 你可以转到新建post视图然后创建一条记录。之后你会发现你可以编辑,查看,以及删除该记录,而这么多功能只是用了一个 rails g scaffold 命令来完成的。

注意:在development模式下(默认)rails会在每次请求时重新加载你的代码,所以你不必要在每次修改后重启你的服务器

 

 

3. 模型

打开模型文件 app/models/post.rb,你会发现里面只是一个空的类:

 

class Post < ActiveRecord::Base
end

 实际上远远不是如此,Post类继承了ActiveRecord::Base类,Active Record为你的rails提供了大量的功能,包括基本的数据库CRUD操作,验证操作,复杂的搜索支持以及模型之间的各种关联。

 

下面我们为post模型添加一些验证:

 

class Post < ActiveRecord::Base
  validates :name, :presence => true
  validates :title, :presence => true, :length => {:minimum => 5}
end

 这些改动确保了了所有的posts都必须具有name与title属性,并且title必须包含至少5个字符。

 

要查看动作的验证,你可以使用控制台。控制台可以根据你的上下文环境执行ruby代码:

 

$ rails c (rails console)

 

控制台加载完成后, 你可以操作你的模型

 

 

irb(main):001:0> p = Post.new(:content => 'a new post')

=> #<Post id: nil, name: nil, title: nil, content: "a new post", created_at: nil, updated_at: nil>

irb(main):002:0> p.save

=> false

irb(main):003:0> p.errors

=> {:name=>["can't be blank"], :title=>["can't be blank", "is too short (minimum is 5 characters)"]}

irb(main):004:0>

 

该代码显示了创建一个post实例,然后试图保存但是返回了false(也就是保存失败), 然后查看下发生的错误

 

退出控制台,输入exit然后回车就可以了。

你可能感兴趣的:(应用服务器,单元测试,Ruby,Rails,ActiveRecord)