私は以前持っていました:
serialize :params, JSON
ただし、これによりJSONが返され、ハッシュキーシンボルが文字列に変換されます。ハッシュを操作するときに最も一般的であるように、シンボルを使用してハッシュを参照したいと思います。シンボルをフィードすると、Railsは文字列を返します。これを回避するために、私は独自のゲッター/セッターを作成しました。セッターは十分に単純で(JSONエンコード)、ゲッターは次のとおりです。
def params
read_attribute(:params) || JSON.parse(read_attribute(:params).to_json).with_indifferent_access
end
params
ループが発生するため直接参照できなかったため、を使用しています。これread_attribute
で、ハッシュキーを記号または文字列で参照できるようになりました。ただし、これはハッシュを更新しません。
model.params.merge!(test: 'test')
puts model.params # => returns default params without merge
これは、ハッシュがコピーによって参照されていると私に思わせます。
私の質問は2つあります。アクティブレコードのJSONシリアル化を拡張して、無関心なアクセスハッシュを返す(またはシンボルを文字列に変換しない)ことができますか?それでも、マージを使用して上記のようにハッシュを機能させることはできますか?そうでない場合は、ゲッターを改善して機能させるために何ができmodel.params.merge!
ますか?
私は(うまくいく)の線に沿って何かを望んでいました:
def params_merge!(hash)
write_attribute(:params, read_attribute(:params).merge(hash))
end
# usage: model.params_merge!(test: 'test')
さらに良いことに、Railsに無関心なアクセスでハッシュを返すようにするか、シンボルを文字列に変換しないようにしてください。助けに感謝します。