Mam następujący kod, w którym tworzę kilka wystąpień rekordów za pomocą FactoryBot:

describe "#force_recalculation_of_lab_container_labs" do
  (1..5).each do |n|
    let("lab_#{n}".to_sym) { create(:lab) }
    let("lab_container_#{n}".to_sym) { create(:skill_path) }
    let("lab_collection_#{n}".to_sym) do
      create(:lab_collection, lab_container: eval("lab_container_#{n}"))
    end
  end
  context 'when adding labs' do
    it "starts with 0 labs" do
      expect(lab_collection_1.labs.count).to eq(0)
    end
    (1..3).each do |n|
      let("lab_collection_inclusion_#{n}") do
        create(:lab_collection_inclusion,
          included_item_id: eval("lab_#{n}").id,
          included_item_type: 'Lab',
          lab_collection_id: eval("lab_collection_1").id,
          subscribed: 0)
      end
    end
    it "updates the lab total correctly after adding labs" do
      binding.pry
    end
  end
end

Z mojego podważnego punktu otrzymuję następujące informacje:

LabCollectionInclusion.count
=> 0

lab_collection_1.lab_collection_inclusions.count
=> 0

Kiedy następnie wywołuję rekord indywidualnie, wydaje się, że istnieje:

lab_collection_inclusion_1
<LabCollectionInclusion:0x000055a45c985b10
 id: 1,
 included_item_id: 1,
 included_item_type: "Lab",
 lab_collection_id: 4,
 subscribed: false,
 created_at: Thu, 01 Nov 2018 10:48:00 UTC +00:00,
 updated_at: Thu, 01 Nov 2018 10:48:00 UTC +00:00>

Od tego momentu istnieje podczas wyszukiwania:

LabCollectionInclusion.count
=> 1

lab_collection_1.lab_collection_inclusions.count
=> 1

Oczywiście nie chcę tego robić dla każdego rekordu, więc moje 2 pytania to po pierwsze, dlaczego tak się dzieje, a po drugie, jak to poprawić?

Z góry dziękuję

0
Mark 1 listopad 2018, 13:53

1 odpowiedź

Najlepsza odpowiedź