在已部署的应用程序中,在我的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
尚未运行。
因此,UPDATE xxx
迁移中的AddStateCodeToStates
没有可用的数据(states
表为空,因为数据将从seeds.rb
填充,因此state_code
仍为NULL
。
所以我的问题是(它们是如此相关,很抱歉没有将它们作为每个单独的问题提出来):
state_codes
(states
表中包含数据后)?state_codes
rake db:migrate
seeds.rb
未在rake db:migrate
上运行,我将如何获得seeds.rb
答案 0 :(得分:3)
与Rails中的许多内容一样,您有很多选择,但......通常的做法是将必要的应用程序数据放在seeds.rb
中。您应该以一种可以多次运行而不添加额外记录的方式编写seeds.rb,例如
State.find_or_create_by_state(:state => 'state_name_here', ':state_code => 'code here')