【发布时间】:2014-12-29 05:53:31
【问题描述】:
在尝试通过回形针 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
【问题讨论】:
-
正如亲缘关系所述,User.update 根据它更新的记录返回对象。所以它基本上不是用户 var 指向的内存中的同一个对象。试试:user = User.update(user.id, user_avatar_params) 我相信你会在这两种情况下得到相同的结果。顺便说一句,我认为“user.avatar_file_name.nil”中的预期值?应该是假的,不是真的
-
感谢@RoaringStones。我已经更正了帖子。是的,当我使用
@user = User.update(user.id, user_avatar_params)时,它按预期打印为 false。