问题描述,对于很多的新手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一点心得的更多相关文章

  1. rails学习笔记: rake db 相关命令

    rails学习笔记: rake db 命令行 rake db:*****script/generate model task name:string priority:integer script/g ...

  2. ruby on rails 数据库操作

    (1)增加列的操作 rails generate migration add_password_digest_to_students password_digest:string bundle exe ...

  3. laravel 数据库操作之 DB facade & 查询构造器 & Eloquent ORM

    <?php namespace App\Http\Controllers; use App\Student; use Illuminate\Support\Facades\DB; class S ...

  4. 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

  5. qt 5 数据库操作(mysql)

    其实大家都知道,QT5以上的都自带了数据库驱动,所以呢,基本上可以直接使用,于是如果想知道怎么连接数据库,请参考这位大神写的.http://qtdebug.com/DB-AccessMySQL.htm ...

  6. Golang - 数据库操作

    1. 下载安装包 go get github.com/Go-SQL-Driver/MySQL go install github.com/Go-SQL-Driver/MySQL 2. 连接池 This ...

  7. 对SQLite数据库操作 操作db文件

    sqlite数据库就是一个DB文件.  程序每操作一次数据库都要读一次 .DB  文件 .  这个文件就是这个SQLite数据库. 如果需要依赖包的可以联系我 工具类: package com.hot ...

  8. android数据库操作之直接读取db文件

    在对数据库操作时,常用的有两种方法: 1.在代码中建库.建表: 2.直接将相关库.表建立好,将db文件拷贝至assets目录下:     现在来看看第二种方法:   private String Ge ...

  9. Android GreenDao操作外部DB数据库文件

    1.背景 所谓外部数据库文件此处指的就是一个在外部单独创建的db文件,假设有这么一个场景,我们项目中有一些本地数据,不需要接口去获取的(不需要进行网络操作),写死的数据,比如全国各个省各个市的一些基本 ...

随机推荐

  1. 【POJ 2482】 Stars in Your Windows

    [题目链接] http://poj.org/problem?id=2482 [算法] 线段树 + 扫描线 [代码] #include <algorithm> #include <bi ...

  2. POJ 2137 DP

    思路: 枚举第一个点集中起点是哪个. 因为第i个点集总和第i-1个点集和第i+1个点集相连. 我们就可以DP求出最优解了. f[i][j]=min(f[i][j],f[i-1][k]+dis(i,j, ...

  3. ubuntu 绘制lenet网络结构图遇到的问题汇总

    Couldn't import dot_parser, loading of dot files will not be possible的问题 1 .sudo pip uninstall pypar ...

  4. Jq自定义的方法绑定树结构

    1.先上效果图  (借鉴博客) 2.这边不做样式的只做结构 function toTreeData(data) { var pos = {}; var tree = []; var i = 0; wh ...

  5. jsp指令和学习笔记集锦

    Jsp包含三个编译指令和七个动作指令.三个编译指令为:page.include.taglib. 七个动作指令为:jsp:forward.jsp:param.jsp:include.jsp:plugin ...

  6. 哪里获取ZBrush简体中文版?

    ZBrush®精简版(ZBrush简体中文版)ZBrushCore发布已经有一段日子了,相信不少人早已迫不及待地开始尝试了,不知道你们的体验如何?毋庸置疑的是,ZBrushCore专为刚接触3D并希望 ...

  7. C# 基础复习 四 ADO

    调用存储过程,并接收多个表的查询结果 一个表用一个DataTable,DataSet可以存储多个DataTable DataSet需要SqlDataAdapter来填充数据 SqlConnection ...

  8. CVX安装使用

    CVX下载 下载地址 使用手册 Using Gurobi with CVX Using MOSEK with CVX CVX安装 下载压缩文件后解压缩至任意地址,打开matlab,进入解压缩后的地址, ...

  9. poj 3311 Hie with the Pie (状压dp) (Tsp问题)

    这道题就是Tsp问题,稍微加了些改变 注意以下问题 (1)每个点可以经过多次,这里就可以用弗洛伊德初始化最短距离 (2)在循环中集合可以用S表示更清晰一些 (3)第一维为状态,第二维为在哪个点,不要写 ...

  10. 利用CORS解决前后端分离的跨域资源问题

    CORS 即CrossOrigin Resources Sharing-跨域资源共享,它定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求.它是一个妥协,有更大的灵活性,但比起简单地允许所有这些 ...