[英]spec for update_all method ruby on rails
我正在嘗試編寫一個規范,以測試我在任務中使用的功能,該功能應重命名json鍵並保留該鍵的舊值。
無論如何,我無法使它通過。
我的功能:
module Database
module JSONHelpers
def change_json_nested_key(klass, base_field, nested_key, from_key, to_key)
klass.where("#{base_field}->>'#{nested_key}' LIKE '%#{from_key}%'")
.update_all(
"#{base_field} = jsonb_set(\
#{base_field}::jsonb,\
array['#{nested_key}'],\
(#{base_field}->'#{nested_key}')::jsonb - '#{from_key}' ||\
jsonb_build_object('#{to_key}', #{base_field}->'#{nested_key}'->'#{from_key}'))"
)
end
end
end
我的規格是:
let(:old_key) { 'drawings' }
let(:new_key) { 'picture' }
let(:boxes) { {"#{old_key}" => '4'} }
let(:move) { Move.create!(boxes: boxes)}
let(:klass) { Class.new { extend(Database::JSONHelpers) } }
subject { klass }
describe '::change_nested_json_key' do
before(:each) { subject.change_json_nested_key(Move, 'data', 'boxes', old_key, new_key) }
該功能在規范之外起作用,但在規范中不起作用。 binding.pry
顯示該值未更改。
知道有什么問題嗎,或者這里的規則是什么?
更改值后,使用(重新加載)更新您的實例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.