【发布时间】:2017-05-19 11:26:51
【问题描述】:
模型Listing 有一个名为vendors 的json 列,默认为{}:
add_column :listings, :vendors, :json, null: false, default: {
hd: {}
...
}
end
在Listing 类中,我尝试将merge! 与hd: {..} 进行哈希,如下所示:
def self.append_vendor_attrs(sku)
listing = find_by(sku: sku) || Listing.new(sku: sku)
listing.vendors[:hd].merge!({ foo: 'bar' })
listing.vendors_will_change!
listing.save! # throws no exceptions in the log
end
但vendors[:hd] 仍然为空。如果我尝试手动复制它:
l = Listing.create...
l.vendors[:hd].merge!({ foo:'bar' })
我的哈希值仍然存在。
【问题讨论】:
-
您是否尝试将
listing.vendors_will_change!移动到您修改属性的行上方?我的直觉是,您方法中的代码告诉 AR 属性的值 是 的新值,因此当您调用save!时它不会认为对象是脏的。 -
@hoffm 当然!在附加数据后,我打电话给
will_change,触发AR“监听”对该行的任何更改,但没有任何改变。去布鲁克林!把它变成一个答案,以便我接受? -
很高兴它成功了!我刚刚添加了一个答案。
标签: json ruby postgresql ruby-on-rails-4