小编Der*_*Mar的帖子

Rails Paperclip:update与update_attributes

当我尝试通过paperclip 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
Run Code Online (Sandbox Code Playgroud)

这是我在user_controller.rb中的强大参数

def user_avatar_params
  params.require(:user).permit(:avatar)
end
Run Code Online (Sandbox Code Playgroud)

UPDATE

因此,在收到提示和令人敬畏的回复后,这就是我所学到的:

User.update返回结果对象是否已成功保存到数据库.因此,User.update(@user.id, user_avatar_params)如果您不进行分配,则不会更新@user变量.@user.update_attributes(user_avatar_params)会隐式更改@user变量.

使用update方法的解决方案就是这样做 @user = User.update(@user.id, user_avatar_params)

ruby-on-rails paperclip

25
推荐指数
3
解决办法
3万
查看次数

标签 统计

paperclip ×1

ruby-on-rails ×1