当尝试通过回形针gem为我的用户模型(在avatar属性下)上传图像时,我意识到有些奇怪的事情。由于某种原因,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
最佳答案
ActiveRecord.update
的行为可能会让您失望:
Updates an object (or multiple objects) and saves it to the database, if validations pass. The resulting object is returned whether the object was saved successfully to the database or not. http://apidock.com/rails/ActiveRecord/Base/update/class
但是,
update_attributes
只会返回false
。这两个都使用模型级验证,因此都应保存或不保存。但是,返回值将不同。
正如@RoaringStones指出的,解决方案是使用
user = User.update(user.id, user_avatar_params)
关于ruby-on-rails - Rails回形针:更新vs. update_attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27684038/