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 ...
随机推荐
- POJ2987 Firing 最大权闭合图
详情请参考http://www.cnblogs.com/kane0526/archive/2013/04/05/3001557.html 值得注意的地方,割边会把图分成两部分,一部分和起点相连,另一部 ...
- codeforces 260 div2 B题
打表发现规律,对4取模为0的结果为4,否则为0,因此只需要判断输入的数据是不是被4整出即可,数据最大可能是100000位的整数,判断能否被4整出不能直接去判断,只需要判断最后两位(如果有)或一位能否被 ...
- bzoj 1778 [Usaco2010 Hol]Dotp 驱逐猪猡(高斯消元)
[题意] 炸弹从1开始运动,每次有P/Q的概率爆炸,否则等概率沿边移动,问在每个城市爆炸的概率. [思路] 设M表示移动一次后i->j的概率.Mk为移动k次后的概率,则有: Mk=M^k 设S= ...
- 一起刷LeetCode2-Add Two Numbers
今天看不进去论文,也学不进去新技术,于是先把题刷了,一会补别的. -----------------------------------------------------我才不是分割线------- ...
- OpenJDK与JDK的区别及Ubuntu下的安装方法
OpenJDK与JDK的区别: OpenJDK是JDK的开放原始码版本,以GPL协议的形式放出.两者的授权协议的不同,且在采用GPL协议的OpenJDK中,SUNJDK的一部分源代码因为产权的问题无法 ...
- trate
from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text imp ...
- LeetCode 234 Palindrome Linked List
Given a singly linked list, determine if it is a palindrome. 思路: 回文结构从后向前遍历与从前向后遍历的结果是相同的,可以利用一个栈的结构 ...
- homework-01 "最大子数组之和"的问题求解过程
写在前面:我的算法能力很弱,并且也是第一次写博文,总之希望自己能在这次的课程中学到很多贴近实践的东西吧. 1.这次的程序是python写的,这也算是我第一次正正经经地拿python来写东西,结果上来说 ...
- My97DatePicker的calendar.js的反混淆
eval(string)函数 <script> eval(function(p, a, c, k, e, d) { p = 'function p(){console.log(" ...
- datasnap的前世今生
随着XE6,XE7,以及半年以后即将发布的XE8,DATASNAP将顺应跨平台的需要, 有可能的情况是这样的:XE8,DATASNAP写的中间件将可以运行在LINUX服务器上面. 大家都知道COM是W ...