在Migration中操作新添加的字段

By YUANYI | Published: MAY 22, 2008

在有些情况下,我们需要在某个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中操作新添加的字段相关推荐

  1. js给对象添加变量属性 js 更改对象中的属性名 数组对象中每个对象添加一个字段-map用法和forEarch用法

    js给对象添加变量属性 & js 更改对象中的属性名 & 数组对象中每个对象添加一个字段-map用法和forEarch用法 1.js给对象添加变量属性 1.js创建一个对象或者在原有对 ...

  2. 在html中加动画效果,html5中css3新添加的动画效果

    字css3中,动画着重要说的就是:transition属性,表示过渡 (1) 如何定义一个动画: 如需在 CSS3 中创建动画,您需要学习 @keyframes 规则. div { width:100 ...

  3. 往数组对象中每一个对象添加一个字段

    1.加相同字段 arr.forEach((value , index) => {     value['sex'] = 'men' }) //  返回原数组arr [    {name: 'li ...

  4. Solr 16 - Solr中添加、更新、删除数据的几种方式 (在URL上或Web页面中操作)

    目录 1 添加/更新索引数据 1.1 JSON格式的操作 1.2 XML格式的操作 2 删除索引数据 2.1 删除符合特定条件的数据 2.2 删除指定ID的数据 2.3 删除全部索引数据 3 在doc ...

  5. 虚拟服务器上磁盘没有初始化,Parallels Desktop使用教程--初始化新添加的磁盘

    满意答案 在Parallels Desktop中,将新的空白虚拟硬盘添加到虚拟机配置后,对于安装在虚拟机中的操作系统来说它将不可见,直至将其初始化. 初始化 Windows 中的新虚拟硬盘 要初始化W ...

  6. mysql添加多字段语句_mysql添加多个字段sql语句

    1.mysql 怎么给一个表一次增加多个字段 一.添加字段的命令如下:alter table tableName add newColumn varchar(8) comment '新添加的字段' 1 ...

  7. mybatis 动态字段与表中不一样_mybatis创建一个或多个新用户 insert 字段和表名不确定时动态添加问题...

    创建用户: /** * 创建一个或多个新用户 insert 字段和表名不确定时动态添加 */ @Test public void createAccount() { String lineColumn ...

  8. mysql中利用sql语句修改字段名称,字段长度等操作(亲测)

    在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...

  9. Mybatis操作Oracle中的Clob和Blob字段

    文章目录 Mybatis操作Oracle中的Clob和Blob字段 [ 我测试用的Mybatis Plus ] A.数据准备 A-1. Oracle中创建测试的表结构:Byte_Array_Test, ...

最新文章

  1. python去实现链表_python实现链表
  2. 这12本经典技术书,是时候C位出道了!
  3. System类的常用方法及类字段
  4. 深度优先搜索(DFS)算法
  5. python2和python3如何共存,如何安装多版本python python2和python3共存以及pip共存
  6. VS2010与OpenCV2410简单配置
  7. selenium通过加载火狐Firefox配置文件FirefoxProfile,实现免登陆访问网站
  8. windows下mysql主从同步_详解windows下mysql的主从同步
  9. java listener 实现机制_Java监听器机制ServletContextListener实现执行某方法函数
  10. Oracle出现ora-01045的解决方法-可用
  11. Tiktok下载量激增至20亿次,视频带货或将席卷海外,跨境电商的风口
  12. GPU程序在GameByro中的使用
  13. python 模拟自己的手写字体
  14. arcgis怎么压缩tif文件_PDF文件怎么压缩?这个方法一看就会!
  15. SpringBoot_MD5加密工具类
  16. linux中文输入配置sougou输入法
  17. 18年第十二届东北四省赛
  18. 撤销性CP-ABE方案研究现状总结 - 2021
  19. 洛谷 P1919 模板】A*B Problem升级版(FFT快速傅里叶)
  20. named_modules named_parameters

热门文章

  1. 聚类算法分析及其性能比较
  2. etl spring_山寨一个Spring的@Component注解
  3. pbewithmd5anddes算法 对应.net_常用插值算法详解
  4. mysql lru scan depth_如何解决mysql警告:“ InnoDB:page_cleaner:1000毫秒的预期循环用了XXX毫秒。设置可能不是最佳的”?...
  5. 运动目标跟踪(十五)--WMIL跟踪
  6. 为什么 BetterScroll 初始化不能滚动?
  7. Git——Windows下Git的安装
  8. C语言:计算器程序。用户输入运算数和四则运算符,输出计算结果
  9. cookie分号后面没有值_Cookie的属性(cookie的设置、获取和删除)
  10. 享元模式在 Java Integer 中的应用