ruby-on-rails Rails Postgresql JSONB列检查键值是否已更改?

s3fp2yjn  于 2022-12-01  发布在  Ruby
关注(0)|答案(1)|浏览(104)

假设jsonb列为data_config
我想检查特定的值在保存前是否已更改。

测试数据:

data_config: {
  "status"=>true,
  "text"=>"sample"
}

导轨型号:

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
wecizke3

wecizke31#

为什么不将参数与当前值进行比较?
因为您提供的信息很少,所以我假设您希望在状态改变时更改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

我希望这种方法能对你有所帮助。

相关问题