【发布时间】:2017-05-24 10:36:54
【问题描述】:
我有一个名为Restream::Custom 的模型和一个属性url。然后我想将url 属性一分为二:server_url 和key,并且都需要。
我为此编写了这样的迁移:
def up
add_column :restream_customs, :key, :string
Restream::Custom.find_each do |r|
last_slash = r.url.rindex("/")
r.key = r.url[last_slash + 1 .. -1] #everything after last slash
r.url = r.url[0 .. last_slash - 1] #everything before last slash
r.save!
end
change_column :restream_customs, :key, :string, null: false
rename_column :restream_customs, :url, :server_url
end
这在开发中效果很好。之后,我在restream/custom.rb 中进行了很多更改,以便与server_url 一起工作并对其进行验证。
并且此迁移因此在暂存时失败(并且将在生产中失败),因为在运行r.save! 时,它面临validates :server_url, presence: true 并抛出unknown attribute 'server_url' for Restream::Custom。
我能做些什么来正确地进行这些更改?如果可能的话,转一圈。 (不要多次从 repo 中提取)。
【问题讨论】:
标签: ruby-on-rails rails-migrations