ruby-on-rails - Rails回形针:更新vs. update_attributes

标签 ruby-on-rails 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
这是我在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/

相关文章:

ruby-on-rails - 如何在Rails 3中使用没有模型的回形针上传图像?

ruby-on-rails - "OpenURI::HTTPError: 401 Unauthorized"与 Rails、HTTParty 和 Paperclip

ruby-on-rails - Rails 5 上的回形针问题

ruby-on-rails - Gemfile 中未使用的 gem 会占用 Rails 中的内存吗?

javascript - 根据复选框的值显示一个 div

javascript - Facebook如何检查用户是否喜欢页面并显示内容?

ruby-on-rails - pry gem 如何重新加载?

ruby-on-rails - 如何创建自定义回形针处理器以检索图像尺寸 Rails 4

ruby-on-rails - Best_in_place 标签槽

ruby-on-rails - after_update 回调导致模型中永无止境的循环