ActiveRecord::ConnectionAdapters::SchemaStatements | 有关 Column 的常见方法笔记

跟 column相关的常见的方法有:

column_exists?  (table_name, column_name, type = nil, options = {})
add_column (table_name, column_name, type, options = {})
remove_column (table_name, column_name, type=nil, options = {})
remove_columns (table_name, *column_name)
change_column (table_name, column_name, type, options = {})
change_column_default (table_name, column_name, default)
change_column_null (table_name, column_name, null, default = nil)
rename_column (table_name, column_name, new_column_name)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

column_exists? 方法用来判断某个表里面的某个字段是否存在,语法如下:

column_exists? (table_name, column_name, type = nil, options = {})

# 一般只需要指定数据表和字段名字就行:
column_exists? :users, :name

# 也可以指定 类型,默认值等来判断符合条件的字段是否存在,如下:
column_exists?(:users, :name, :string)
column_exists?(:users, :name, :string, limit: 100)
column_exists?(:users, :name, :string, default: 'default')
column_exists?(:users, :name, :string, null: false)
column_exists?(:users, :salary, :decimal, precision: 8, scale: 2)

add_column 方法用来为某个表添加字段,

相对于上面的 column_exists? 方法,add_column 方法必须指定字段的 type.

用法和 column_exists? 极其类似,直接把上面的例子方法名改动(除了没有指定类型那个)
如下,就变成添加字段了

# 语法
add_column (table_name, column_name, type, options={})
# 例子
add_column(:users, :name, :string)
add_column(:users, :name, :string, limit: 100)
add_column(:users, :name, :string, default: 'default')
add_column(:users, :name, :string, null: false)
add_column(:users, :salary, :decimal, precision: 8, scale: 2)

remove_column 方法用来删除某个表格里面的某个字段

所需要的参数和 column_exists? 完全一样,不过最常见的指定表名和字段名字。当然你可以像column_exists? 那样指定满足某些条件。

remove_column (table_name, column_name, type = nil, options = {})

# 语法
remove_column (table_name, column_name, type = nil, options = {})
# 例子
remove_column(:users, :name)

如果一下子要删除好几个字段,remove_columns 可以帮到我们。指定表名字和多个字段名字就行,使用如下:

# 语法
remove_column (table_name, *column_name)
# 例子
remove_column(:users, :address, :phone)

当要改变某个字段的结构,使用 change_column 系列,可以达到我们的目的。

change_column 的语法和 add_column 的语法一样,必须指定 type.

# 语法
change_column (table_name, column_name, type, options={})
# 例子
change_column (:users, :name, :string, limit: 50)
change_column (:users, :description, :text)

而change_column_default 和 change_column_null 则是用来做一些小的改动。

# 语法
change_column_defalut (table_name, column_name, default)
change_column_null (table_name, column_name, null, default = nil)

# 两个方法的例子如下:
# 改变字段的默认值:
change_column_default(:users, :name, "Tom")
change_column_default(:users, :age, 18)
change_column_default(:users, :email, nil)

# 改变字段是否允许为空:
change_column_null(:users, :nickname, false)
change_column_null(:users, :nickname, true)

值得注意的是 change_column_null 的第四个参数,这个参数是可选的,你可以用这个参数来吧已经存在的 Null 数据替换为某个值, 当你需要加某些约束的时候可以使用,但是必须注意,在你改完之后加进去的数据是非法的,也就是说第四个参数并不是设置字段的默认值。还是不用这个为好 :)

重命名字段:

给定所需参数既可

# 语法
rename_column (table_name, column_name, new_column_name)
# 例子
rename_column(:users, :description, :intro)

  

原文地址:https://www.cnblogs.com/laoquans/p/3984653.html