鉴于我有data_config
作为jsonb列
如果要在保存之前进行更改,我想检查特定键的值。
测试数据:
data_config: {
"status"=>true,
"text"=>"sample"
}
Rails模型:
attr_json_config(default_container_attribute: :data_config)
attr_json :status, :boolean, default: true
before_save :check_config
def check_config
if self.status_changed? # => want to have something like this to check if value changed?
# ... do something
end
end
就我而言,这[[工作,但我相信有更好的方法。
status_val = self.attr_json_changes.changes_to_save.try(:[], "status")
# above returns [true, false] (old & new value)
if status_val.try(:first) != status_val.try(:last)
...do something
end
因为您提供的信息很少,所以我假设如果状态更改,您想更改jsonb中的其他键。在这种情况下,您应该在准备提交更新的值之前使记录不可变。
所以在您的控制器中,应该是这样的:
class MyController < ApplicationController
def update
if params[:data_config][:status] != @model.['data_config']['status'] # check if value change
# ... do something
new_params = do_something
end
if @model.update(new_params)
# render success
else
# render failed
end
end
end
我希望这种方法可以为您提供帮助。