ruby on rails 3-如何在迁移中向新创建的列添加数据



在一个已经部署的应用程序中,在我的seeds.rb中,我有以下内容:

State.create!(:state => "Alabama")
State.create!(:state => "Delaware")
...

现在我想为每个州添加两个字母的代码。

所以我做了一个这样的迁移:

class AddStateCodeToStates < ActiveRecord::Migration
  def self.up
    add_column :states, :state_code, :string
    update(<<-SQL
    UPDATE states SET state_code='WA' where state = 'Washington'
    SQL
    )
    ...lots of these SQL statement...
  end
  def self.down
  end
end

问题是:

在开发环境中,当我想从头开始重新创建数据库时,在迁移运行之后,此时seeds.rb还没有运行。

因此,AddStateCodeToStates迁移中的UPDATE xxx没有可处理的数据(states表为空,因为数据将从seeds.rb填充),因此state_code保持为NULL

所以我的问题是(它们是如此相关,很抱歉没有把它们作为单独的问题来问):

  1. 在重新创建数据库时(在states表中包含数据之后),如何填充state_codes
  2. 当部署的应用程序上的rake db:migrateseeds.rb不在rake db:migrate上运行)时,如何获取state_codes
  3. 我应该一开始就不使用seeds.rb(而是将数据放入迁移中)吗

就像Rails中的许多东西一样,您有很多选项,但是。。。。一般的做法是在CCD_ 16中放入必要的应用数据。您应该以一种可以多次运行而不添加额外记录的方式编写seeds.rb,例如

State.find_or_create_by_state(:state => 'state_name_here', ':state_code => 'code here')

相关内容

  • 没有找到相关文章

最新更新