Вам нужно будет позвонить user.reload
всякий раз, когда данные изменяются в базе данных.
В приведенном выше коде объект "пользователь" создается в памяти из данных, извлеченных из базы данных с помощью User.first
. Затем, похоже, ваша confirm_email_user_url
изменяет базу данных . Объект не знает об этом, пока вы не reload
его, который повторно получает данные из базы данных.
Я не уверен, есть ли программный способ узнать, когда вам нужно будет перезагрузить объект, но как разработчик вы должны знать о том, что происходит, и обращаться с ним соответствующим образом. По большей части моего опыта (который несколько ограничен), это только проблема во время тестирования. В производственной среде не типично, что объект изменяется в базе данных, пока он загружается в память. Обычно происходит изменение объекта в памяти и его сохранение в базе данных (т. Е. user.email = "foo@bar.com"
, за которым следует user.save
). Я полагаю, если бы у вас было приложение с высокой активностью, в котором множество пользователей могли бы что-то быстро изменить, вы бы хотели быть осторожным.