2016-09-19 4 views
2

私はかなり大きなRails 4.1 Appを実行しています。中央モデルの1つにmodel_nameというカラムがあります。レール4.1から4.2へのカラム名の変更

アプリをrails 4.2にアップグレードしようとして失敗した後、この列名は実際にはレール予約語であることがわかりました。名前を使用したレールメソッドはプライベートメソッドだったので、これは私たちの注目にはあたらなかった。レール4.2以降は公開されており、レールは命名の混乱に大きな時間を掛けます。

それが私たちのアプリケーションの至る所に参照されますので、私は本当に、本当に、本当にしたいが、でも、シリアル化されたデータの多くには、歴史的なURLのなどを列の名前を変更していない

名前の変更以外の代替アップグレード手順上の任意の提案列?

+1

レールの独自のフォークを維持/パッチ適用の外側に、私はあなたがその多くの選択肢を持っていることを確認していません。 model_nameはレールソースのどこかで使用されています。 – Doon

+1

私はちょうどOOPのアプローチを取って、必要なことを行うモデルクラスのmodel_nameメソッドを定義します。あなたは4.1で問題に遭遇していないので、必要に応じてレールのデフォルトを上書きするだけです。 – bkunzi01

答えて

1

少なくともデータベースとモデル名にmodel_nameという名前を変更する必要があります。 URLのシリアライズされたデータなどの中で、そのまま残すことができます。モデルの新しいアクセサを使用する必要があります。私はあなたのモデルクラス内で長期的にこのメソッドを再定義することをお勧めします。 model_nameの動作に依存するサードパーティ製の宝石やRailsの内部関数を予測することはできません。あなたは、データベースと、使用中に、このcolumの名前を変更しようとすることができ、短期間で

def model_name 
    read_attribute(:new_column_name) 
end 

def model_name=(new_modelname) 
    read_write_attribute(:new_column_name, new_modelname) 
end 
関連する問題