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文件,假设有这么一个场景,我们项目中有一些本地数据,不需要接口去获取的(不需要进行网络操作),写死的数据,比如全国各个省各个市的一些基本 ...
随机推荐
- WebRTC学习与DEMO资源一览
一. WebRTC学习 1.1 WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源码中加入了webrtc源码,放在/external/webrtc/ ...
- EOJ 3124 单词表
题目描述 提取英文文本中的单词,重复出现的单词只取一个,把它们按照字典顺序排序,建立为一个单词表. 例如:英文文本如下: “ask not what your country can do for y ...
- input file上传文件
如何使用input[type='file']来上传文件呢? html: //angular<input type="file" (change)="fileChan ...
- adplus 抓取dump
工具所在路径 C:\Program Files\Windows Kits\10\Debuggers\x64 cmd窗口切换目录倒adplus所在路径下,输入抓取命令.adplus -hang -p ...
- Dragon Balls[HDU3635]
Dragon Balls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu2614 Beat
题意: 有n个问题. 给出你解决完第i个问题之后解决j问题所花的时间,花的时间越多表示难度越大,每次只能解决难度大于或等于上个题难度的问题.问你最多能解决多少问题. 他妈的,第一次做想半天想不出来如何 ...
- Python-超好用的Django源码解析
http://djangobook.py3k.cn/2.0/
- Pyhton学习——Day39
# CSS的常用属性# 1 颜色属性# <div style="color:rgb(255,0,0)">ppppp</div># 2 字体属性# font- ...
- How to debug systemd step by step
docker run -ti --name systemd --net host --privileged reg.docker.xxxxxxxx:latest /usr/lib/systemd/sy ...
- [luogu2059 JLOI2013] 卡牌游戏 (概率dp)
题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把 ...