0
シリアル化されたテキスト列を持つモデルがあります。レコードを保存してリロードすると、値は保持されているように見えますが、レコードを照会すると値はなくなります。Rails 3シリアル化されたハッシュ値は保存されますが、永続化されません。
(簡単にするために切り詰められた、以下のデモンストレーション)
class Subscription < ActiveRecord::Base
serialize :pending_changes, Hash
attr_accessible :pending_changes
attr_accessor :pending_changes
end
class AddPendingChangesToSubscriptions < ActiveRecord::Migration
def change
add_column :subscriptions, :pending_changes, :text
end
end
s = Subscription.new
s.pending_changes = {foo: "bar"}
s.save
# => true
s.reload.pending_changes
# => {foo: "bar"}
Subscription.last.pending_changes
# => nil
値として{"foo" => "bar"}
を保存するときに同じことが起こります。
私もsave
が呼び出されたときに、次のように、結果のSQLクエリがあることに気付きました:
UPDATE 'subscriptions' SET 'updated_at' = '2017-12-01 23:46:05', 'pending_changes' = '--- {}\n' WHERE 'subscriptions'.'id' = 2
、私は、DBの列のデータ型がtext
であることを確認して行ったと私は、を付加したものと加えなかったものを用いて試してみた。Hash
。
よくトリックを行いました。ありがとう。私は 'attr_accessible'を設定する習慣を覚えました。私の経験上、大量割り当てに必要なのでです。この場合、私はそれなしですることができます。 'attr_accessible'とシリアル化されたデータの競合について知っていますか? –