Обновление связанной записи из модели объединяемой таблицы
-
20-09-2019 - |
Вопрос
У меня есть отношения has_many :through, связывающие игроков с командами ЧЕРЕЗ менеджмент.
Я хочу иметь счетчик в таблице команд (немного похожий на кэш счетчиков), который сообщал бы мне, сколько новых ассоциаций появилось с начала недели.Конечно, кэш счетчиков не будет работать, поскольку он всегда будет возвращать все когда-либо созданные ассоциации.
Я попытался обновить связанную команду из модели управления.Это никогда не удается.Несмотря на то, что приращение связанной команды сохранено нормально, после создания ассоциации мой счетчик по-прежнему равен 0.
Я также попробовал использовать наблюдателя.Наблюдатель был вызван, как я и ожидал, мне удалось получить команду, но никакие обновления к ней опять же не сохранились.
Я уверен, что упускаю что-то очевидное!Как это реализовать на рельсах?
Я настроил github, чтобы проиллюстрировать проблему: запуск спецификации rake не увенчается успехом.
Решение
В вашей спецификации:
fanteam_spec.rb
it "should be able to create a fanteam" do
@fanteam.save
@fanteam.changes.should be(0)
@fanteam.should be_valid
@fanteam.players << Factory.build(:player)
@fanteam.reload # this is what you are forgetting
@fanteam.changes.should be(1)
end
По сути, ваш наблюдатель обновляет одну и ту же запись, но не тот же объект.
Другие советы
Я подозреваю, что проблема в том, что вы назвали поле счетчика changes
, который уже является методом ActiveRecord для проверки изменений атрибутов записи с момента последнего сохранения.Попробуйте изменить имя этого поля и посмотрите, работает ли ваш код.