У меня проблема, я не могу понять ... В моем проекте у меня есть несколько моделей. У меня есть channel
, у которого много restreams
, и у каждого из них есть один provider
(это полиморфная ассоциация).Рельсы проблемы с параметрами обновления
Так что в коде я заменяю один restream.provider
на другой, а в конце restream.provider
имеет значение nil
. Я пытался поставить много выходного тестирования, так что теперь у меня есть такой результат: в одном из контроллеров У меня есть код:
puts channel.restreams.last.provider.to_json
byebug
Delayed::Job.enqueue(StartRestreamJob.new(air.id)) if air.server.online?
и puts
выходы именно то, что я ожидал: объект поставщика, преобразуется в формат JSON. Но в start_restream_job
я также имеет код:
air = Air.find(air_id)
channel = air.channel
puts channel.restreams.last.provider.to_json
byebug
и предоставляет мне только null
строки. В результате объект restream
, сохраненный в базе данных, не имеет связи с provider
. В чем может быть проблема?
Thanx!
======================
код, который назначает новый provider
к restream
:
new_provider = ProviderType1.new(restream.provider.params_hash)
#params hash provides some variables that I need to save from old provider
old_provider = restream.provider
new_provider.restream = restream
res = new_provider.initialize_event
#here some requests for external services are being made, after what some attributes of provider are being updated and after that provider is being saved by calling self.save!
if res == ProviderType1.SUCCESS_CODE
old_provider.restream = nil
old_provider.save!
old_provider.destroy
new_provider.restream = restream
restream.provider = new_provider
restream.save!
new_provider.save!
else
#smth that does not matter now
end
===== ===================
UPD
Даже добавив сохранение силы обоих restream и поставщик не делают Sence:
channel.restreams.each do |r|
r.provider.save!
r.save
end
У меня все еще есть новый объект provider
, сохраненный в БД, но он не имеет никакого отношения к объекту restream
и наоборот.
=============
UPD 2
Добавление печати в prevoious кусок кода открыл новые вещи для меня:
channel.restreams.each do |r|
r.provider.save!
r.save!
puts ProviderType1.find(r.provider_id).restream.to_json
конец
Отпечатки выдержек null
. Значит ли это, что r.provider.save!
ничего не делает? И если да, то почему так? И почему он молчит? (Это работает в месте в коде, где puts channel.restreams.last.provider.to_json
выводит объект, не null
)
Моя догадка вы «не сохраняются изменения поставщика. В вашем контроллере изменения можно увидеть, поскольку поставщик только что был назначен. Внутри работника вы повторно создаете воздух и его ассоциации, но назначение поставщика теряется. –
@AlexandreAngelim Пожалуйста, ознакомьтесь с обновлением.Я также сохраняю как провайдера, так и restream несколько раз в функции беспокойства, который называется внутренним контроллером. Но все же добавление силы сбережения до конца функции контроллера не делает вещь – Ngoral
Можете ли вы показать мне код, в котором вы назначаете нового провайдера для отдыха? –