rails数据库操作rake db一点心得
问题描述,对于很多的新手rails lover来说,搞定db是件头疼的事情,当建立了一个model,测试了半天发现我草列名写错了,再过一会儿发现association里面竟然没有xxx_id,这下子shit啦,头脑一片混乱,okay,删了从来吧,这种方法其实是最好的,因为你又可以复习一边啦!哈哈哈,不过正常人应该不太喜欢这种方式,比如说我,我不喜欢复习,所以,here comes the 解决办法,其实不是解决办法了,而是我们来学习一下rake 的db操作吧!让我们从头来叙述一边,这样新手估计更会弄明白这之间到底发生了什么,少说屁话了,开工,新建一个rails应用,第一步,建立一个model吧!
新建一个模型呢,通常会得到如图所示的几个文件,那么点开来看了,发现跟我们关心的数据库有关的东东都在xxxxxx_create_users.rb里面,

OKay, 看上去还不错,一切都正常,哦,shit,竟然忘记了加部门id,这可怎么办,删掉model 吗?这是一种方法,在没有rake db:migrate操作执行之前,一切还很来得及,

可以看出,这个操作只是把之前generate的操作生成的文件全部都去掉,所有我们需要做的只是再来一次,okay,如果你喜欢dos窗口的,可以这么做,但是,另一种方法可能会更好一些吧,现在让我们来解释一下这个rails g model User name email, 这会生成一个模型,包含string类型的name 和email, 请记住,这部是cache,生成的只是文件,既然是文件,那么必然可以改咯,但是到哪里改呢? 还好只有四个文件,逐一打开发现只有两个文件当中涉及到了字段,一个是刚才我们打开的xxxxxxxxx_create_users.rb,另一个是users.yml,实施上,test_unit用的很少,你可以忽略,但是,作为一个追求完美主义的程序员来说,不要为后面的开发留下任何bug,既然知道了那就加呗,


搞定,现在就像跟使用rails g model User name email department_id:integer一模一样啦!结束手工!啊,不对,另外一个问题来了,rake db:migrate以后想改怎么办?如果在这个时候,已经在数据库里面有一个表了,如果更改了,如果你更改了字段再来rake db:migrate的话,会出现:

既然有表了,那就删除呗,holy crap,我google了半天就是没有找到rake db:drop table users这样子的指令,只有rake db:drop,这会把其他的表也都给删了,那么,当然里面的数据也全都没了,这肯定是大家不想看到的,为了一张表删了其他所有的表,当然,这些表的结构不用重建,rake以后都会有,开发开始阶段可以,但是后面有了很多测试数据就不推荐了,相关的命令一大堆,言归正转,那么怎么办呢,可以生成一个新的migration, 使用rails g migration xxx,


在change里面可以加drop_table :users,但是,rake db:migrate在执行的时候是有时间先后顺序,那怎么将这个提前呢,只有一个很扯淡的方法,那就是将前面的timestamp提前,这时候执行rake db:migrate就okay了,那有没有更好的办法呢,当然有,在之前加drop_table :users不就好了吗?looks like this:

这样一来,命令可以执行了,而且,注意了哦,其他的表由于没有改变,是不会发生变化的!nice,这就是我觉得最好的方法了!这只是举例了最简单的,还有好多的操作,上个link吧:http://guides.rubyonrails.org/migrations.html,仔细琢磨吧!
在最后,总结一下rails在执行rake db系列操作的时候的顺序与规则,每次执行,都会将上次操作的记录存放到.schema的一个文件中去,在.schema文件中,有一个数字,它其实代表时间,每次执行都只会执行db/migration/ 文件夹下面的时间戳比这个时间延后的文件,也就是说,每执行一次一个rake db:migration后,都有一个或多个文件的时间戳被写入到.schema中,那么下次再次执行rake db:migration时,只有数字比这个大的时间戳会被执行,其他的全部都会跳过。把握住了这一点,基本上你就知道怎么去处理了!
rails数据库操作rake db一点心得的更多相关文章
- rails学习笔记: rake db 相关命令
rails学习笔记: rake db 命令行 rake db:*****script/generate model task name:string priority:integer script/g ...
- ruby on rails 数据库操作
(1)增加列的操作 rails generate migration add_password_digest_to_students password_digest:string bundle exe ...
- laravel 数据库操作之 DB facade & 查询构造器 & Eloquent ORM
<?php namespace App\Http\Controllers; use App\Student; use Illuminate\Support\Facades\DB; class S ...
- rails使用 rake db:migrate 提示 Migrations are pending; run 'rake db:migrate RAILS_ENV=development' to resolve this issue.
首先得特么建立数据库 : rake db:create 实际问题是没有int应该用integer http://www.rubycc.com/column/rails3.2.3/rails.htm
- qt 5 数据库操作(mysql)
其实大家都知道,QT5以上的都自带了数据库驱动,所以呢,基本上可以直接使用,于是如果想知道怎么连接数据库,请参考这位大神写的.http://qtdebug.com/DB-AccessMySQL.htm ...
- Golang - 数据库操作
1. 下载安装包 go get github.com/Go-SQL-Driver/MySQL go install github.com/Go-SQL-Driver/MySQL 2. 连接池 This ...
- 对SQLite数据库操作 操作db文件
sqlite数据库就是一个DB文件. 程序每操作一次数据库都要读一次 .DB 文件 . 这个文件就是这个SQLite数据库. 如果需要依赖包的可以联系我 工具类: package com.hot ...
- android数据库操作之直接读取db文件
在对数据库操作时,常用的有两种方法: 1.在代码中建库.建表: 2.直接将相关库.表建立好,将db文件拷贝至assets目录下: 现在来看看第二种方法: private String Ge ...
- Android GreenDao操作外部DB数据库文件
1.背景 所谓外部数据库文件此处指的就是一个在外部单独创建的db文件,假设有这么一个场景,我们项目中有一些本地数据,不需要接口去获取的(不需要进行网络操作),写死的数据,比如全国各个省各个市的一些基本 ...
随机推荐
- Android实现图片相似度
Android实现图片相似度 最近公司有一个需求,就是希望能判断用户提交的照片是否是身份证的正面或者反面.可以通过预设一张拍摄清晰的身份证正面或者反面,来对比是否相似,那么问题就转化为如何计算两张图片 ...
- jar文件配置冲突问题transformResourcesWithMergeJavaResForDebug
先看本人AS报错异常 Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > c ...
- SwipeRefreshLayout的使用,下拉刷新
1. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android ...
- mysql5.5碰到的type= MyISAM报错问题
最近把mysql升级到5.5版本,发现type= MyISAM报错,网上查了一下原来MYSQL5.5.x 版本 不支持 TYPE=MyISAM 这样的语句了!!! MYSQL语句写法 TYPE=My ...
- Reflection (computer programming) -反射-自身结构信息
n computer science, reflection is the ability of a computer program to examine, introspect, and modi ...
- 电子邮件的三个协议: SMTP、IMAP、POP3
个人总结: 读完这篇文章需要10分钟 讲解了跟电子邮件有关的三个协议: SMTP(simple message transfer protocol 简单信息传输协议 IMAP (internet me ...
- zTree -- jQuery 树插件实现点击文字展开子节点
新版本的zTree是单击+号展开子项,点击文字选中该项,双击文字展开子项 项目用的是3.5版本的,如果要点击文字展开子项暂时没查到资料,自己琢磨了下 项目用的是jquery.ztree.core-3. ...
- WIN10 java环境变量问题之 配置的JDK1.8版本却是1.7
问题前沿,在开发项目中,发布的项目出现了内存溢出问题,我挨个把代码看了一遍,并不能准确定位到那个地方能出现内存溢出问题,后来想到使用压力测试,较可能出现内存溢出的接口进行一番测试. 我就安装了一个ap ...
- 流媒体应用程序Mobdro或存在安全隐患
Mobdro是一款流媒体应用程序,可以安装在任何Android设备上,包括手机,平板电脑,亚马逊的Fire TV Stick和Google的Chromecast.它现在已经流行了一段时间,特别是在围绕 ...
- python3 继承与组合
什么叫继承? 所谓继承,就是class_A里面的功能从class_B中直接获取,从而节约了代码且使用方便. 什么叫组合? 除了继承,还有一种我们可以实现目的的方式,那就是组合,同样可以节约代码.只不过 ...