update_attributes не сохраняется в базе данных
Правильные пользовательские параметры отображаются в моей функции отладки после отправки формы, но параметры по умолчанию отображаются при входе в консоль.
контроллер
def update
current_user.update_attributes(params[:user])
flash[:success] = "Your settings have been saved!"
render new_status_update_path
end
модель
attr_accessible :deficit_pct,
:target_bf_pct,
:activity_factor
Заметки:
Самый близкий вопрос, который я мог бы найти к этому на SO, - это вопрос, который изменяет атрибуты объекта, который существует посредством ассоциации.
Я пытался использовать метод Object.update, хотя я получаю сообщение об ошибке:
закрытый метод "update" вызван для #
Есть идеи?
Спасибо!
4 ответа
После игры с консолью я обнаружил, что даже если я изменяю атрибуты вручную, атрибуты не "прилипают" после выхода из консоли.
Так что я войду в консоль, поменяю атрибуты пользователей, протестирую их, и они будут изменены. Если я существую и введу заново, ТОГДА проверим их, они вернутся к своим значениям по умолчанию.
Это наводит меня на мысль, что метод after_initialize в пользовательской модели, который устанавливает значения по умолчанию, выполняется после каждого сохранения. Я думал, что он будет работать только после первого сохранения объекта, но теперь я знаю, что он запускается при каждом сохранении.
after_initialize :default_values
def default_values
self.goal = "Cut"
self.measurement = "US"
self.bmr_formula = "katch"
self.fat_factor = 0.655
self.protein_factor = 1.25
self.deficit_pct = 0.10
self.target_bf_pct = 0.10
self.activity_factor = 1.3
end
Как только я удаляю все эти значения и метод after_initialize, он сохраняется навсегда.
Попробуйте код:-
def update
if current_user.update_attributes(params[:user])
flash[:success] = "Your settings have been saved!"
render new_status_update_path
else
p 111111111111
p current_user.errors.inspect
end
end
после проверки вашего журнала на наличие ошибок. существуют для этой активной записи
Что-то вроде:
def update
if current_user.update_attributes(params[:user])
flash[:success] = "Your settings have been saved!"
render new_status_update_path
else
some_error_handling_code
end
end
Не будет отображаться успех при сбое сохранения. Как правило, прежде чем сообщать конечному пользователю об успешном завершении, необходимо проверить, не завершилась ли операция сохранения или любая другая внутренняя операция.
Вы должны убедиться, что у вас нет ошибок проверки. Вы можете проверить их, используя:
active_record_model.errors
В вашем случае это было бы
current_user.errors
Кроме того, вы должны напечатать возвращаемое значение из update_attributes
чтобы увидеть, если это true
или же false
, Если вы получаете false
Сохранение было отменено. Скорее всего, это было вызвано ошибками проверки или обратным вызовом false
,