У меня есть LabCollection:
class LabCollection < ApplicationRecord
# Relationships
belongs_to :lab_container, polymorphic: true, optional: true
has_many :lab_collection_labs
has_many :labs, -> { published }, through: :lab_collection_labs
has_many :lab_collection_inclusions, dependent: :destroy
end
У него есть много LabCollectionLabs:
class LabCollectionLab < ApplicationRecord
acts_as_list scope: :lab_collection_id, add_new_at: :bottom
belongs_to :lab_collection
belongs_to :lab
end
, который имеет идентификатор лаборатории и принадлежит лаборатории.
У меня естьспецификация, которая проверяет, как создаются новые ассоциации, и она не работает в следующем пункте:
context 'when the lab container has labs already present' do
it 'removes the present labs and adds the new ones' do
subject = RawLabAdder
expect(populated_lab_collection.labs).to eq labs
subject.new(populated_lab_collection, [lab4.id, lab5.id]).perform
expect(populated_lab_collection.labs).not_to eq labs
binding.pry
expect(populated_lab_collection.labs).to eq [lab4, lab5]
end
end
Если вам нужно увидеть внутреннюю работу кода, дайте мне знать, однако проблема, похоже, связана с RSpecи освежающие ассоциации.Когда я нажимаю точку привязкиlab_id и что лаборатория существует для этих идентификаторов.Я полагаю, что моя проблема в том, что я не обновляю записи правильно, однако я попытался:
# populated_lab_collection.reload
# populated_lab_collection.lab_collection_labs.reload
# populated_lab_collection.lab_collection_labs.each do |x|
# x.lab.reload
# end
# populated_lab_collection.labs.reload
Любой совет о том, как я могу заставить RSpec правильно читать в вложенных записях ассоциациях, очень ценится.Как я уже сказал, когда я проверяю запись, у нее есть 2 lab_inclusion_labs, у каждого из которых есть лаборатория, однако у родительской записи явно нет лабораторных работ.
РЕДАКТИРОВАТЬ: класс RawLabAdder:
module LabCollections
class RawLabAdder
def initialize(incoming_lab_collection, lab_ids = [])
@lab_ids = lab_ids
@lab_collection = incoming_lab_collection
end
def perform
remove_associated_labs
add_labs
end
private
def add_labs
@lab_ids.each do |x|
lab = Lab.find(x)
LabCollectionInclusionAdder.new(@lab_collection, lab).perform
end
end
def remove_associated_labs
@lab_collection.lab_collection_inclusions.map(&:destroy)
@lab_collection.lab_collection_labs.map(&:destroy)
end
end
end