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应用开发,相关代码详细请见参见本书。

posted @ 2010-11-11 16:09  lonelystarxing  阅读(470)  评论(2编辑  收藏  举报