Ruby on Rails Tutorial 第六章 用户模型
1、用户模型
(1)数据库迁移
Rails默认使用关系数据库存储数据,数据库中的表有数据行组成,每一行都有相应的列,对应数据属性。把列名命名为相应的名字后,ActiveRecord会自动把他们识别为用户对象的属性。
$ rails generate controller Users new #生成用户控制器和new动作,控制器名是复述Users
$ rails generate model User name:string email:string #生成用户模型,模型名是单数User
$ bundle exec rake db:migrate #向上迁移
$ bundle exec rake db:rollback #向下迁移
迁移是一种修改数据库结构的方式,可以根据需求递进修改数据模型。执行generte命令后会自动为用户模型创建迁移,这个迁移的作用是创建一个users表以及name和email两个列。
(2)模型文件
A:创建用户对象
>> user=User.new(name:"AmySun",email:"12***@**.com") #创建
>> user.save #保存
上面两步等价于下面一步,即把创建和保存合成一步完成:
>> foo=User.create(name:"AmySun",email:"12***@**.com")
>> foo.destroy #create的逆操作
B:查找用户对象
>> User.find(1) #根据用户ID查找
>> User.find_by(email:"12***@**.com") #通过属性查找,如果用户数量过多,使用find_by的效率不高
>> User.first #返回数据库中的第一个用户
>> User.all #返回一个ActiveRecord:Relation实例,其实这是一个数组,包含数据库中的所有用户
C:更新用户对象
>> user.email="aaa@aaa.com"
>> user.save
或
>> user.update_attributes(name:"LilySun",email:"bbb@bbb.com") #更新多个属性值
>> user.update_attribute(name:"LilySun") #更新单个属性值
2、用户数据验证
几种常用的数据验证:存在性、长度、格式和唯一性
$ rails generate migration add_index_to_users_email #为User的email属性添加索引
$ bundle exec rake db:migrate
添加了用户验证的User类的代码如下:
class User < ActiveRecord::Base
before_save { email.downcase! }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
validate :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, length: { minimum: 6 }
end
Ruby on Rails Tutorial 第六章 用户模型的更多相关文章
- Ruby on Rails Tutorial 第五章 完善布局
本章目标:局部视图.Rails路由.Asset Pipeline.Sass1.Bootstrap是Twitter开发的开源Web设计框架mockup是网页构思图,在web领域经常称之为“线框图”,用于 ...
- Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 类
Ruby和其他面向对象的语言一样,使用类来组织方法,然后实例化类,创建对象.1.构造方法使用双引号是字符串的字面构造方法,也可以使用“具名构造方法”,即在类名上调用new方法 >> s=& ...
- Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 字符串
1.辅助方法 2.字符串 输入“irb”进入Ruby命令行开发环境,控制器的启动方法是在命令行中执行“rails console”. (1)字符串连接 >>"foo"+ ...
- Ruby on Rails Tutorial 第三章 静态页面
1.生成静态页面 $ rails generate controller StaticPages home help #生成主页和帮助页面的路由.控制器及静态页面 $ rails destroy ...
- Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 其他数据类型(二)
1.方法 定义如下所示: def string_message(str='') if str.empty? "It's an empty string!" else "T ...
- Ruby on Rails Tutorial读书笔记-1
只是怕忘了命令,全部撸一次,记个大概.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 安装Ruby之前,先要安装RVM: curl -L https://get.rvm.io | bas ...
- Ruby on Rails Tutorial 第2版 学习笔记
Ruby on Rails Tutorial 第2版 在线阅读:http://railstutorial-china.org/ 英文版:http://ruby.railstutorial.org/ru ...
- (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(2)
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第六章译文精选的第二部分,其余章节将陆续放出.上一 ...
- Ruby on Rails Tutorial 第二章 之 用户资源&MVC&REST
说明:用户资源包括用户数据模型和这个模型相关的Web页面. 1.用户数据模型如下: 2.使用Rails内置的脚手架生成用户资源中,执行如下所示命令: $ rails generate scaffold ...
随机推荐
- XTUOJ1250 Super Fast Fourier Transform 暴力
分析:因为加起来不超过1e6,所以最多有1000+个不同的数 做法:离散化搞就好了 #include <cstdio> #include <iostream> #include ...
- 《Python 学习手册4th》 第六章 动态类型简介
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书)“重点笔 ...
- Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务
RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...
- Selenium用户扩展
Selenium用户扩展 这很容易扩展Selenium IDE加入自定义操作,断言和定位,策略,这是通过添加方法,在JavaScript的帮助下Selenium 对象原型.在启动时,Selenium会 ...
- 设计模式系列 1——StaticFactory(静态工厂),AbstractFactory(抽象工厂)
本文出自 代码大湿 代码大湿 本系列持续更新,敬请关注. 1 静态工厂 静态工厂介绍: 静态工厂模式可以实现接口封装隔离的原则.在客户端只知接口而不知实现的时候可以使用静态工厂模式. 源码请点击我 角 ...
- cloud maintenance of OpenNebula
OpenNebula 4.4.1 maintenance release,官方建议当前的生产环境使用3.x or 4.x的其它版本; php调用curl工具伪造ip Upgrading from Op ...
- 任务分发系统gearman
1 Gearman是什么 Gearman Job Server@http://gearman.org/. Gearman 是一个任务分发系统,它提供了一个分发框架,能够分发某类任务到更适合处理这类任务 ...
- Win7关机出现关闭程序提示框
运行输入Gpedit.msc回车打开组策略,在左侧选计算机配置/管理模板/系统/关机选项,在右侧双击“关闭会阻止或取消关机的应用程序的自动终止功能”,在打开的提示框中选“已启用”,按确定即可.
- ajax 传参 乱码问题
http://blog.csdn.net/yiyuhanmeng/article/details/7548505 开发一直用firfox网页,调试什么的都很方便.所以遇到了浏览器之间的兼容问题.url ...
- AngularJS应用的解析
模板(Templates) 模板是您用HTML和CSS编写的文件,展现应用的视图. 您可给HTML添加新的元素.属性标记,作为AngularJS编译器的指令. AngularJS编译器是完全可扩展的, ...