より正規化されたデータベーススキーマを使用するようにシステムを更新しています。現在、テーブルには、ユーザ名をテキストとして格納するuser
カラムがあります。 user_id
列とusers
表を追加し、some_build.user
のユーザーモデルを返すようにします。今のところかなり簡単です。列を同じ名前の別のものに置き換えますが、そのままにしておきます。
残念ながら、このコードベースのテストは、あなたが望むよりも徹底的ではありません。変更を元に戻す必要がある場合は、古いuser
の列に値を設定してください。私はbuild.rb
でこれを入れてみました:Build#user
はUser
モデルに向けたまま、私は、それがuser
欄に書くでしょう期待していた
alias_attribute :legacy_username, :user
before_save do
if changed_attributes.keys.include? 'user_id'
legacy_username = user.name
end
end
。残念ながらlegacy_username
は、user
列ではなくuser
メソッドのエイリアスを終了します。つまり、some_build.legacy_username
がUser
を返し、before_saveフックが成功しません。
user
と呼ばれるものをすべて維持しながらこれを行うことはできますか、名前を変更する必要はありますか?