在Migration中操作新添加的字段
在Migration中操作新添加的字段
在有些情况下,我们需要在某个migration中对新增加的字段进行操作,比如下面这个将name改成first_name和last_name的migration:
def self.up
add_column :profiles, :last_name, :string
add_column :profiles, :first_name, :string
Profile.find(:all).each do |profile|
profile.first_name = profile.name
profile.save(false)
end
remove_column :profiles, :name
end
这段代码看起来没什么问题,但是如果你真的这么做,那就惨了,你数据库中所有用户的名字信息都会丢失,而不会如你所愿的保存到first_name中,这是因为,当你为profiles表添加first_name字段时,Profile model已经完成了初始化,因此在它的columns里面是不存在first_name的,自己它也就不会被保存到数据库中,因此,要使上面这段代码工作正常,你需要在修改数据库后重新加载Profile model:
def self.up
add_column :profiles, :last_name, :string
add_column :profiles, :first_name, :string
Profile.remove_class(Profile)
load('profile.rb')
Profile.find(:all).each do |profile|
profile.first_name = profile.name
profile.save(false)
end
remove_column :profiles, :name
end
现在,name就可以被正确的迁移到first_name字段中了,这个方法也可以用于在Console中重新加载某个过期的model。
来源:www.letrails.cn
转载于:https://www.cnblogs.com/ToDoToTry/archive/2011/08/04/2127950.html
在Migration中操作新添加的字段相关推荐
- js给对象添加变量属性 js 更改对象中的属性名 数组对象中每个对象添加一个字段-map用法和forEarch用法
js给对象添加变量属性 & js 更改对象中的属性名 & 数组对象中每个对象添加一个字段-map用法和forEarch用法 1.js给对象添加变量属性 1.js创建一个对象或者在原有对 ...
- 在html中加动画效果,html5中css3新添加的动画效果
字css3中,动画着重要说的就是:transition属性,表示过渡 (1) 如何定义一个动画: 如需在 CSS3 中创建动画,您需要学习 @keyframes 规则. div { width:100 ...
- 往数组对象中每一个对象添加一个字段
1.加相同字段 arr.forEach((value , index) => { value['sex'] = 'men' }) // 返回原数组arr [ {name: 'li ...
- Solr 16 - Solr中添加、更新、删除数据的几种方式 (在URL上或Web页面中操作)
目录 1 添加/更新索引数据 1.1 JSON格式的操作 1.2 XML格式的操作 2 删除索引数据 2.1 删除符合特定条件的数据 2.2 删除指定ID的数据 2.3 删除全部索引数据 3 在doc ...
- 虚拟服务器上磁盘没有初始化,Parallels Desktop使用教程--初始化新添加的磁盘
满意答案 在Parallels Desktop中,将新的空白虚拟硬盘添加到虚拟机配置后,对于安装在虚拟机中的操作系统来说它将不可见,直至将其初始化. 初始化 Windows 中的新虚拟硬盘 要初始化W ...
- mysql添加多字段语句_mysql添加多个字段sql语句
1.mysql 怎么给一个表一次增加多个字段 一.添加字段的命令如下:alter table tableName add newColumn varchar(8) comment '新添加的字段' 1 ...
- mybatis 动态字段与表中不一样_mybatis创建一个或多个新用户 insert 字段和表名不确定时动态添加问题...
创建用户: /** * 创建一个或多个新用户 insert 字段和表名不确定时动态添加 */ @Test public void createAccount() { String lineColumn ...
- mysql中利用sql语句修改字段名称,字段长度等操作(亲测)
在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...
- Mybatis操作Oracle中的Clob和Blob字段
文章目录 Mybatis操作Oracle中的Clob和Blob字段 [ 我测试用的Mybatis Plus ] A.数据准备 A-1. Oracle中创建测试的表结构:Byte_Array_Test, ...
最新文章
- python去实现链表_python实现链表
- 这12本经典技术书,是时候C位出道了!
- System类的常用方法及类字段
- 深度优先搜索(DFS)算法
- python2和python3如何共存,如何安装多版本python python2和python3共存以及pip共存
- VS2010与OpenCV2410简单配置
- selenium通过加载火狐Firefox配置文件FirefoxProfile,实现免登陆访问网站
- windows下mysql主从同步_详解windows下mysql的主从同步
- java listener 实现机制_Java监听器机制ServletContextListener实现执行某方法函数
- Oracle出现ora-01045的解决方法-可用
- Tiktok下载量激增至20亿次,视频带货或将席卷海外,跨境电商的风口
- GPU程序在GameByro中的使用
- python 模拟自己的手写字体
- arcgis怎么压缩tif文件_PDF文件怎么压缩?这个方法一看就会!
- SpringBoot_MD5加密工具类
- linux中文输入配置sougou输入法
- 18年第十二届东北四省赛
- 撤销性CP-ABE方案研究现状总结 - 2021
- 洛谷 P1919 模板】A*B Problem升级版(FFT快速傅里叶)
- named_modules named_parameters
热门文章
- 聚类算法分析及其性能比较
- etl spring_山寨一个Spring的@Component注解
- pbewithmd5anddes算法 对应.net_常用插值算法详解
- mysql lru scan depth_如何解决mysql警告:“ InnoDB:page_cleaner:1000毫秒的预期循环用了XXX毫秒。设置可能不是最佳的”?...
- 运动目标跟踪(十五)--WMIL跟踪
- 为什么 BetterScroll 初始化不能滚动?
- Git——Windows下Git的安装
- C语言:计算器程序。用户输入运算数和四则运算符,输出计算结果
- cookie分号后面没有值_Cookie的属性(cookie的设置、获取和删除)
- 享元模式在 Java Integer 中的应用