【写给朱大虫的教程】【Ruby on Rails】【004】违背Rails理念的简单开始,上部

前提:已经建立了一个rails空工程

一、实践课题

  1. 目标:设计一个用户登录页面,判断用户名、密码的对错
  2. 数据表:建立一个名为users的表,包含两个有用的字段name、password

解释:

本程序不具有任何实用价值,仅作为讲解之用。

二、开始实践

1、一般都习惯先把数据表设计出来

rails设计数据表的一般流程:

  1. 在app/models文件夹下新建一个model文件
  2. 在db/migrate文件夹下新建一个migrate文件
  3. 在migrate文件中设计数据表、字段……
  4. 在数据库中生成数据表,当然,你也可以最后生成
  5. 在model文件中规定字段的限制、验证、以及表的相互关系……

开始动手操作:

(1)新建model

在rails工程目录下打开终端,输入命令:

$ rails g model User

看看这个命令做了什么:

自动在db/migrate文件夹下新建了一个migrate文件,自动在app/models文件夹下新建了一个model文件。一下子就完成了前两步!

解释:

  1. rails命令,不解释
  2. g,其实是generate,是rails命令的一个动作,我洋文太差,就习惯用简写。前面几节提到过rails new,还提到过rails server简写为rails s
  3. model,不解释
  4. User,model的名字,这里貌似可以小写的,但是生成的model文件名是小写,model名一定是首字母大写。注意是单数user而不是复数users。

插话一下:

其实我们可以单独生成migrate文件。

在rails工程目录下打开终端,输入命令:

$ rails g migration create_users

这样就自动在db/migrate目录下生成了一个migrate文件,我几分钟前运行该命令生成文件如图:

解释:

  1. rails命令,不解释
  2. g不解释
  3. migration,翻译成中文是“迁移”的意思,也就是说保存数据表的结构,就可以非常方便迁移数据库,扯远了。
  4. create_users,要建的migrate文件的名称,单词之间用下划线隔开。
  5. 201107……自动生成的一个时间戳标识,非常方便于增量开发,后面再解释

(2)设计数据表

先看一下我们生成的migrate文件的内容:

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|

      t.timestamps
    end
  end

  def self.down
    drop_table :users
  end
end

根据我们的设想编辑之后的内容:

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.string :name
      t.string :password
 
      t.timestamps
    end
  end

  def self.down
    drop_table :users
  end
end

解释:

  1. 我们打算建一个users表,所以create_table :users ,注意是users而不是user,rails对单复数是非常敏感的,数据表的名字最好默认用复数
  2. 我们打算建两个字段name和password,上面我用了string格式
  3. rails一般都会加一句 t.timestamps ,它会建立两个时间戳,后面就知道啦
  4. 在self.down里drop_table

再插嘴一句:

如果把第一步中的命令改为:

$ rails g model user name:string password:string

我们这一步就完全可以省略,当然,我还是喜欢两步走,纯属个人喜好。

(3)生成数据表

在终端中继续执行命令:

$ rake db:migrate

看一下我的数据库:

生成了uses表,咦,怎么还多了一个?看看是什么东西!

明白了吧!就是你那个migrate文件的时间戳,也就是最晚生成的migrate文件的时间戳。

看看我们的users表:

  1. id,rails默认自动生成的id字段
  2. name,password,我们添加的字段
  3. created_at,updated_at,还记得那一句 t.timestamps吗?就是这两个时间字段

(4)配置model文件

打开app/models文件夹下的user.rb文件

class User < ActiveRecord::Base #注意,这里model名是首字母大写!
end

我们要保证name和password字段不为空,我们就要在model中加验证:

class User < ActiveRecord::Base
  validates :name, :password,  :presence => true
end

由此可见,rails就是给我这种懒人量身打造的!

三、中途动手体验一下,增强学习的信心

其实到此为止,所谓的底层就基本设计完了,完全可运行,不信,亲自动手试试:

在工程目录下打开终端,执行

$ rails  c

解释:

  1. rails命令,不解释
  2. c,console的简写,终端命令行,我就是够懒,天天用简写!

直接输入命令吧:

Loading development environment (Rails 3.0.9)
irb(main):001:0> User
=> User(id: integer, name: string, password: string, created_at: datetime, updated_at: datetime)
irb(main):002:0> u=User.new
=> #<User id: nil, name: nil, password: nil, created_at: nil, updated_at: nil>
irb(main):003:0> u.name="zhao"
=> "zhao"
irb(main):004:0> u.password="123456"
=> "123456"
irb(main):005:0> u.save
=> true

看看数据库有没有变:

解释:

  1. 命令中的User就是model名,首字母大写!
  2. u.save返回结果为true,表明我们的数据通过了验证,成功插入了数据库

我们密码为空试试:

返回了false,没有通过验证!

今天到此为止,累了,忘了写验证错误返回message,罢了罢了,赶紧睡觉!

对了!输入exit退出rails console!

posted @ 2011-07-20 23:51  承古韵  阅读(925)  评论(0编辑  收藏  举报