【写给朱大虫的教程】【Ruby on Rails】【004】违背Rails理念的简单开始,上部
前提:已经建立了一个rails空工程
一、实践课题
- 目标:设计一个用户登录页面,判断用户名、密码的对错
- 数据表:建立一个名为users的表,包含两个有用的字段name、password
解释:
本程序不具有任何实用价值,仅作为讲解之用。
二、开始实践
1、一般都习惯先把数据表设计出来
rails设计数据表的一般流程:
- 在app/models文件夹下新建一个model文件
- 在db/migrate文件夹下新建一个migrate文件
- 在migrate文件中设计数据表、字段……
- 在数据库中生成数据表,当然,你也可以最后生成
- 在model文件中规定字段的限制、验证、以及表的相互关系……
开始动手操作:
(1)新建model
在rails工程目录下打开终端,输入命令:
$ rails g model User
看看这个命令做了什么:
自动在db/migrate文件夹下新建了一个migrate文件,自动在app/models文件夹下新建了一个model文件。一下子就完成了前两步!
解释:
- rails命令,不解释
- g,其实是generate,是rails命令的一个动作,我洋文太差,就习惯用简写。前面几节提到过rails new,还提到过rails server简写为rails s
- model,不解释
- User,model的名字,这里貌似可以小写的,但是生成的model文件名是小写,model名一定是首字母大写。注意是单数user而不是复数users。
插话一下:
其实我们可以单独生成migrate文件。
在rails工程目录下打开终端,输入命令:
$ rails g migration create_users
这样就自动在db/migrate目录下生成了一个migrate文件,我几分钟前运行该命令生成文件如图:
解释:
- rails命令,不解释
- g不解释
- migration,翻译成中文是“迁移”的意思,也就是说保存数据表的结构,就可以非常方便迁移数据库,扯远了。
- create_users,要建的migrate文件的名称,单词之间用下划线隔开。
- 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
解释:
- 我们打算建一个users表,所以create_table :users ,注意是users而不是user,rails对单复数是非常敏感的,数据表的名字最好默认用复数
- 我们打算建两个字段name和password,上面我用了string格式
- rails一般都会加一句 t.timestamps ,它会建立两个时间戳,后面就知道啦
- 在self.down里drop_table
再插嘴一句:
如果把第一步中的命令改为:
$ rails g model user name:string password:string
我们这一步就完全可以省略,当然,我还是喜欢两步走,纯属个人喜好。
(3)生成数据表
在终端中继续执行命令:
$ rake db:migrate
看一下我的数据库:
生成了uses表,咦,怎么还多了一个?看看是什么东西!
明白了吧!就是你那个migrate文件的时间戳,也就是最晚生成的migrate文件的时间戳。
看看我们的users表:
- id,rails默认自动生成的id字段
- name,password,我们添加的字段
- 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
解释:
- rails命令,不解释
- 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
看看数据库有没有变:
解释:
- 命令中的User就是model名,首字母大写!
- u.save返回结果为true,表明我们的数据通过了验证,成功插入了数据库
我们密码为空试试:
返回了false,没有通过验证!
今天到此为止,累了,忘了写验证错误返回message,罢了罢了,赶紧睡觉!
对了!输入exit退出rails console!