2017-05-24 12 views
0

Restream::Customというモデルと属性urlというモデルがあります。次に、urlという属性を2つに分割して、server_urlkeyという2つの属性を必要とするようにしました。モデルコードが変更された後にデータ更新によるマイグレーションを実行

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がスローされるため、この移行は結果的にステージングに失敗し(プロダクションでは失敗します)。

これを正しく変更するにはどうすればよいですか? 1ターンで可能ならば。 (レポから数回引っ張らないでください)。

答えて

0

は、更新データだ

def up 
    add_column :restream_customs, :key, :string 
    rename_column :restream_customs, :url, :server_url 

    Restream::Custom.find_each do |r| 
    last_slash = r.server_url.rindex("/") 
    r.key = r.server_url[last_slash + 1 .. -1] #everything after last slash 
    r.server_url = r.server_url[0 .. last_slash - 1] #everything before last slash 
    r.save! 
    end 

    change_column :restream_customs, :key, :string, null: false 
end 
+0

...明らかに偉大前server_urlに列urlの名前を変更してみてください!ありがとう!しかし、まだ1つの問題が残っています:同じエラーを発生させる私の 'custom.rb'に' validates:key、presence:true'も持っています:( – Ngoral

+0

いくつかのURLは 'key' –

関連する問題