如何在迁移的帮助下将数据插入表中,并且该表先前是通过另一次迁移生成的

时间:2012-05-10 13:09:41

标签: ruby-on-rails-3 ruby-on-rails-3.1

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

我得到了这样的代码但我怎么能用它以及我无法理解的地方。

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

2 个答案:

答案 0 :(得分:6)

此:

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

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

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

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

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

答案 1 :(得分:2)

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

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

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

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

如果您只想填充数据库,则应该为数据库设定种子。请访问this railscast了解详情。

编辑:为数据库播种:

创建一个名为db / seeds.rb的文件 像这样添加记录创建代码:

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

然后,

rake db:seed

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