3

我有一个包含用户名、角色和公司的角色表。我想通过一个新的迁移文件将数据插入到该表中,那么我该怎么做呢?

我得到了这样的代码,但我该如何使用它以及我无法理解的地方。

class Foo < ActiveRecord::Migration
  def self.up
    Users.new(:username => "Hello", :role => "Admin")
  end
  def self.down
    Users.delete_all(:username => "Hello")
  end
end
4

2 回答 2

7

这个:

Users.new(:username => "Hello", :role => "Admin")

不会将数据插入到您的表中。它只是创建一个用户对象。要插入数据,您必须调用save您创建的对象:

Users.new(:username => "Hello", :role => "Admin").save

或者更好的是,使用create代替new

Users.create(:username => "Hello", :role => "Admin")
于 2012-05-11T05:39:18.267 回答
3

您似乎仅使用此数据库迁移来填充数据。

数据库迁移旨在更改数据库架构,而不是填充数据库(尽管您可以添加一些逻辑来在更改后填充数据库;例如,如果您向 users 表添加列 - 角色,您可以添加一些自定义逻辑为用户表中的现有条目填充新添加的字段)。有关详细信息,请参阅 rails api -迁移

如果您忘记在之前的数据库迁移中添加代码来填充数据库,您可以撤消之前的迁移并使用以下命令再次应用它:

rake db:rollback
... Edit the previous migration ..Add the code to populate
rake db:migrate

如果您只想填充数据库,则应改为为数据库播种。观看此 railscast以获取更多信息。

编辑:播种数据库:

创建一个名为 db/seeds.rb 的文件
添加记录创建代码,如下所示:

['Sampath', 'Suresh'].each do |name|
  User.create(role: 'admin', username: name)
end

然后,

rake db:seed

这将读取 seed.rb 并填充数据库。

于 2012-05-11T05:27:46.353 回答