Я понял что-то довольно странное, пытаясь загрузить изображение с помощью paperclip gem для моей модели пользователя (под атрибутом аватара). По какой-то причине User.update и @user.update_attributes ведут себя по-разному. Кто-нибудь знает, почему это так?
#using @user.update_attributes(user_avatar_params)
def update_profile_pic
@user = User.find(params[:id])
@user.update_attributes(user_avatar_params)
puts @user.avatar_file_name.nil? # prints false as expected
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
#using User.update(@user.id, user_avatar_params)
def update_profile_pic
@user = User.find(params[:id])
User.update(@user.id, user_avatar_params)
puts @user.avatar_file_name.nil? # prints true although successfully saves
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
И вот мои сильные параметры в user_controller.rb
def user_avatar_params
params.require(:user).permit(:avatar)
end
ОБНОВИТЬ
Поэтому после получения быстрых и удивительных ответов это то, что я узнал:
User.update
возвращает результирующий объект, успешно ли он был сохранен в базе данных или нет. Поэтому User.update(@user.id, user_avatar_params)
не обновляет переменную @user, если вы не выполняете присвоение. @user.update_attributes(user_avatar_params)
изменяет переменную @user неявно.
Решение для работы с методом обновления состоит в том, чтобы сделать @user = User.update(@user.id, user_avatar_params)