迁移创建
1 、创建迁移,一条一条的创建,创建完一条后,立马确定是否正确,不正确就修正,不要创建了几条迁移后,才发现错误
2、不是所有迁移都可以正确执行回滚的,比如drop_table
3、回滚命令
rails db:rollback
回滚一次
rails db:rollback STEP=4
回滚四次(PS:后面step必须大写)
创建连接表
其实就是创建,中间的关系表
create_join_table :products,:categories
# 会创建categories_products 表(顺序按表面开头的字母)
# 创建 product_id 和 category_id 字段
添加外键
其实就是直接与另一表关联了
# balances中必须要有,account_id字段,才能去加外键
add_foreign_key :balances,:accounts
# 将 balances中account_id 与 accounts.id 关联了
发现
1、 拥有外键后,创建数据时,可不填(为nil)
2、赋值时,如果赋给它一个不存在的会回滚
迁移执行失败
如: rails db:migrate
失败时,是不用执行回滚的,因为都没有正确执行
迁移文件名 和 迁移类名
rails 会检查这两者是否一致,不一致会抛出错误哦
在迁移文件中 execute 写法
def change
#...一些其它的东东
execute <<-SQL
alter table products
drop column name;
SQL
# 可以在里面放sql
数据库中check
create table products(
name text;
price numeric check(price > 0);
);
# 如果 price 不大于o 会报错
应用中进项目数据库
命令rails db
查看一个model中包含哪些字段
在控制台,输入model名即可,如:Account
迁移 up 与 down方法
1、一般用于写复杂的迁移,为了保证回滚时能成功按照一定顺序执行
2、在迁移文件中,up
与down
总是成对出现
3、up 把迁移往前推
4、down 则是把迁移往后滚(也相当于给自己留的后路)
迁移方法不够用时
Account.connection.execute("update accounts set name = 'dmc' where id =2 ")
用这种方式,可执行任何sql
PS:另外发现,里面的sql和Model.connection 中 Model没有任何关系
网友评论