Rails Postgresql JSONB列检查键值是否已更改?

问题描述 投票:0回答:1

鉴于我有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
ruby-on-rails ruby ruby-on-rails-5 jsonb
1个回答
0
投票
为什么不将参数与当前值进行比较?

因为您提供的信息很少,所以我假设如果状态更改,您想更改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

我希望这种方法可以为您提供帮助。
© www.soinside.com 2019 - 2024. All rights reserved.