簡體   English   中英

rails上update_all方法ruby的規范

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM