続編4.29.0を使用しています。PostgreSQLを使用しているRubyのSequence dirty statusがjsonカラムで機能していません
アクションをトリガーするためにbefore_save
続編フックを使用する予定です。この場合、以前の実装では、@changed_columns
sequelインスタンス変数を使用して特定の列が変更されているかどうかを確認する必要がありますその変更された、いくつかのものは次のように:
class MyModel < Sequel::Model
def before_save
special_method if @changed_columns.include? :properties
super
end
def special_method
...
end
end
今回私は、PostgreSQL jsonb型の列(ところで非常に便利)を使用しています。 @changed_columns
が列を保持することはありませんが、列を "ダーティ"として指定できることはわかりますが、この列が変更されたすべての場所を変更しなければならないことを意味します。
これが動作していないかの例:
irb(main):001:0> MyModel.columns
=> [:id, :foo, :properties] # :foo is a string, :properties is jsonb
irb(main):002:0> my_model = MyModel.last
=> #<MyModel @values={:id=>37, :foo=>"bar", :properties=>{"foo"=>true}}>
irb(main):003:0> my_model.properties['foo'] = false
=> false
irb(main):004:0> my_model
=> #<MyModel @values={:id=>37, :foo=>"bar", :properties=>{"foo"=>false}}>
irb(main):005:0> my_model.modified?
=> false # this should be true since properties changed a value inside the hash
irb(main):006:0> my_model.foo = 'foo'
=> "foo"
irb(main):007:0> my_model
=> #<MyModel @values={:id=>37, :foo=>"foo", :properties=>{"foo"=>false}}>
irb(main):008:0> my_model.modified?
=> true
irb(main):009:0> my_model.changed_columns
=> [:foo] # should include the :properties column
値:列値に変異を検出したい場合は、modification_detectionプラグインを使用する必要がありますか? –
はい、その電話を追加してみましょう – zetacu