0
일련 화 된 텍스트 열이있는 모델이 있습니다. 레코드를 저장하고 다시로드하면 값이 지속되는 것처럼 보이지만 레코드를 쿼리하면 값이 사라집니다. 값으로 {"foo" => "bar"}
을 저장할 때레일 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
같은 일이 발생합니다.
나는 또한 save
가 호출 될 때, 결과 SQL 쿼리는 다음과 같다 것으로 나타났습니다 :
UPDATE 'subscriptions' SET 'updated_at' = '2017-12-01 23:46:05', 'pending_changes' = '--- {}\n' WHERE 'subscriptions'.'id' = 2
비슷한 질문에 대한 답변에 따라, 나는이 DB를 열 데이터 유형이
text
있는지 확인했습니다 및 나는
Hash
을 덧붙인 것과 붙이지 않고
serialize :column_name
을 사용해 보았습니다.
글쎄! 감사. 질량 할당 (내 경험)에 필요하기 때문에'attr_accessible'을 설정하는 습관이 생겼습니다. 나는이 경우없이 할 수 있습니다. 'attr_accessible'과 직렬화 된 데이터 충돌에 대해 잘 알고 있습니까? –