📌  相关文章
📜  activerecord 添加列 (1)

📅  最后修改于: 2023-12-03 15:29:17.367000             🧑  作者: Mango

ActiveRecord添加列

在Rails中,我们可以通过ActiveRecord进行数据库的操作。在数据库设计中,经常需要添加新的列来存储额外的数据。本文将介绍如何使用ActiveRecord添加列。

使用Migration添加列

Migration是Rails中处理数据库变更(如添加列)的一种方式。Migration是一个Ruby类,用于在数据库中添加、修改和删除表、列等。

1. 生成Migration文件

在终端中运行以下命令,生成一个用于添加列的Migration文件。

rails generate migration AddColumnNameToTableName column_name:data_type

其中,AddColumnNameToTableName是一个自定义名称,用于表示生成的Migration文件是向哪个表添加列。column_name:data_type表示要添加的列的名称和数据类型。

例如,要向users表中添加一个名为age的整型列,可以运行以下命令。

rails generate migration AddAgeToUsers age:integer
2. 修改Migration文件

打开刚刚生成的Migration文件,找到change方法,并在其中添加使用add_column方法添加新的列的代码。

class AddAgeToUsers < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :age, :integer
  end
end
3. 运行Migration

在终端中运行以下命令,执行Migration并将新列添加到数据库中。

rails db:migrate

至此,我们就成功添加了一个新列到数据库中。

使用ActiveRecord添加列

除了使用Migration外,我们还可以使用ActiveRecord直接在模型中添加新的列。

1. 定义模型

首先,需要在模型中增加新的属性和对应的validation。

class User < ApplicationRecord
  validates :age, numericality: { greater_than_or_equal_to: 0 }
end
2. 修改数据库表

然后,在终端中运行以下命令,将新的属性添加到数据库表中。

rails g migration AddAgeToUsers age:integer

在生成的Migration文件中添加下面的代码。

class AddAgeToUsers < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :age, :integer
  end
end

保存文件后,运行Migration。

rails db:migrate
3. 使用新属性

现在,我们已经成功将新的属性添加到了数据库中。可以在模型中使用这个属性。

user = User.new(name: "张三", age: 18)
user.save

注意:如果你添加的属性需要在创建实例时就填充,可以将attr_accessor加入到User类的定义中。

class User < ApplicationRecord
  attr_accessor :age
  validates :age, numericality: { greater_than_or_equal_to: 0 }
end

这样,我们就可以直接访问并填充age属性。

user = User.new(name: "张三")
user.age = 18
user.save
总结

本文介绍了使用ActiveRecord添加列的两种方式:使用Migration和使用ActiveRecord。这两种方式各有优劣,具体使用哪种方式需要根据实际情况来决定。