首页 > 代码库 > ActiveRecord::ConnectionAdapters::SchemaStatements | 有关 Column 的常见方法笔记

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)

  

 

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