これは単純なものでなければなりませんが、それは私のナットを運転しています!
私はその後Railsは移行中にレコードを変更することはできません
class SubjectsTextField < ActiveRecord::Migration
def self.up
add_column :users, :subjects, :text
User.find(39).update_attribute :subjects, "hey there"
end
def self.down
remove_column :users, :subjects
end
end
列が作成されたレコードを更新したいが、私は、レコード39をチェックするために行くとき、それは被験者のフィールドがnullだと「ちょっとそこに」言っていない移行を持っています。移行中にエラーはスローされず、update_attribute行は動作したかのようにtrueを返します。
この行は、コンソールで完璧に動作し、期待した効果があります。私は2番目のマイグレーションでupdate_attributeラインを入れてみました
User.find(39).update_attribute :subjects, "hey there"
を。 1つの「rake db:migrate」で両方を同時に吹き飛ばしても、それはまだ機能しません。
しかし、ここには奇妙な部分があります。 2つの別々のマイグレーションを実行する場合は、「rake db:migrate VERSION = 10」と言うだけで列を作成し、次に「rake db:migrate」を使用して属性を更新します。IT WORKS!
何が起こっているのか...移行中にレコードを変更するにはどうすればよいですか?私はこれを過去にしばしばやっていることを覚えているようです。多分Rails 2.3.2とは何か違うのでしょうか?
ありがとうございます! ブライアン
それは感謝のマイケルでした!私はこの前に遭遇したことはないと信じられません...万人に感謝します。 –
私も同様の問題がありました。誰かがモデルを作成した移行でt.timestampを使用しなかったが、t.datetime:updated_atを実行した。ですから、created_atを追加して、既存のオブジェクトのcreated_atをupdated_atの現在の値に初期化したいのですが、常にnilでした。変わったことは、Time.nowを使ってみるとうまくいきました。 とにかく、マイケルに感謝します。あなたの投稿は多くの助けになりました!それは私のためにそれを固定した。 – bratsche
マイケルにapiページへのリンクをありがとう:他のページで#reset_column_informationメソッドが廃止されていることが判明したので、更新しておくと便利です。 – Attilio