ROR新手上路之四创建用户模型及验证
创建用户模型
要创建用户模型,必须要有自己的数据库,之前已经说过数据库的配置问题,可参见开发环境搭建。
运行命令1 >ruby script/generate model User
这是创建用户模型最快捷的方法
命令1执行生成一db/migrate/..._create_users.rb文件,这是用来创建users数据库表的migration文件的重要组成部分。其中的self.up与self.down两个函数是实现数据库版本间交换。
以下代码创建一非空users数据库表,内容有用户名、Email及密码等列。
class CreateUsers < ActiveRecord::Migration def self.up create_table :users do |t| t.column :screen_name, :string t.column :email, :string t.column :password, :string end end def self.down drop_table :users end end
运行命令2 >ruby db:migrate 创建基本的用户表
命令3 >rake db:migrate VERSION=0 将数据库版本还原到0
命令4 >rake db:migrate 回滚到最新版本
用户模型验证
rails自带一个公共工具——控制台,可以使用所有标准的rails函数,以及个人编写的所有类或者函数。简单点说,控制台就是rails的一个命令行。
依次运行命令5 >ruby script/console
>>user=User.new(:screen_name=>"me",:email=>"",:password=>"a")
>>user.screen_name
>>user.save 来存储相关的用户信息
依次运行命令6来查看用户信息是否被存储
>>user=nil 返回=>nil
>>user=User.find_by_screen_name("me") 返回已存储的用户相关信息
>>user.password 返回=>"a"
其中find_by_screen_name是rails知道用户信息中有一个名为screen_name属性,然后根据此属性构造的方法,方便我们查找数据库中的用户信息。
以下代码是一个针对已存储的字段全功能验证机制,代码在models/user.rb内
class User < ActiveRecord::Base
#Max & min lengths for all fileds
SCREEN_NAME_MIN_LENGTH=4
SCREEN_NAME_MAX_LENGTH=20
PASSWORD_MIN_LENGTH=4
PASSWORD_MAX_LENGTH=40
EMAIL_MAX_LENGTH=50
SCREEN_NAME_RANGE=SCREEN_NAME_MIN_LENGTH..SCREEN_NAME_MAX_LENGTH
PASSWORD_RANGE=PASSWORD_MIN_LENGTH..PASSWORD_MAX_LENGTH
validates_uniqueness_of :screen_name, :email
validates_length_of :screen_name, :within=>SCREEN_NAME_RANGE
validates_length_of :password, :within=>PASSWORD_RANGE
validates_length_of :email, :maximum=>EMAIL_MAX_LENGTH
# calidates_presence_of :mail
validates_format_of :screen_name, :with=>/^[A-Z0-9_]*$/i, :message=>"must contain only letters,"+"number,and underscores"
validates_format_of :email, :with=>/^[A-Z0-9._%-]+@([A-Z0-9-]+\.)[A-Z]{2,4}$/i, :message=>"must be a vaild email address"
# def validate
# error.add(:email,"must be valid.")unless emils.include?("@")
# if screen_name.include?(" ")
# error.add(:screen_name,"cannot include spaces.")
# end
# end
end
此中的正则表达式可对字段进行了各类非正常输入进行了验证,有兴趣的可以查查相关文章。
此时,我们需要重新载入rails环境 >>reload!
之前>>user=User.new(:screen_name=>"me",:email=>"",:password=>"a")再次运行控制台会列出相关的错误信息。
下面的是关于魔法列的一二学习
利用>ruby script/generate migration AddUsertimestamps生成db/migrate/..._add_user_timestamps.rb文件。
class AddUserTimestamps < ActiveRecord::Migration def self.up add_column :users, :created_at, :timestamp add_column :users, :updated_at, :timestamp end def self.down remove_column :users, :created_at remove_column :users, :updated_at end end
运行命令7 >rake db:migrate启用该文件
依次运行命令8 >ruby script/console
>>user=User.new("screen_name=>"example",:email=>"example@example.com",:password=>"example")
>>user.save
>>user.created_at
>>user.updated_at
此时你会看到created_at与 updated_at的值相同,这是第一次创建时候默认更新。
注:本人目前学习的主要参考资料是RailsSpace Web应用开发,相关代码详细请见参见本书。