获取回形针以在不验证的情况下裁剪图像

时间:2010-04-27 22:23:10

标签: ruby-on-rails ruby validation paperclip

Hello stackoverflow成员。

我一直关注此guide以使用户拥有自己的头像。

但是我遇到了一个小问题。 当用户裁剪图像时,模型会尝试验证我的所有验证。 我的用户模型如下所示:

class User < ActiveRecord::Base

  has_attached_file :avatar, :styles => { :small => "100x100>", :large => "500x500>" }, :processors => [:cropper]

  attr_accessor :password, :crop_x, :crop_y, :crop_w, :crop_h
  attr_accessible :crop_x, :crop_y, :crop_w, :crop_h
  validates_confirmation_of :password
  validates_presence_of :password

当用户运行裁剪更新脚本时,user模型会尝试验证密码。但是因为我在裁剪页面上没有密码字段,所以无法对其进行验证。

以下是作物的更新:

@user = User.find(current_user.id)
  if @user.update_attributes(params[:user])
    flash[:notice] = "Successfully updated user."
  end

如何以简单明了的方式绕过这个?

4 个答案:

答案 0 :(得分:0)

尝试条件验证:

validates_confirmation_of :password, :if => :password
validates_presence_of :password, :if => :password

答案 1 :(得分:0)

根据authlogic使用的技术,尝试仅在新记录,密码更改或密码密码(存储哈希/加密密码的列)为空白时验证密码。< / p>

class User
  validates_confirmation_of :password, :if => :require_password?
  validates_presence_of :password, :if => :require_password?

  def password=(pass)
    return if pass.blank?

    # Encrypt password, etc
    # ...

    @password_changed = true
  end


  private
    def require_password?
      new_record? || @password_changed || crypted_password.blank?
    end
end

答案 2 :(得分:0)

@htanata的类似答案,但使用ActiveRecord:Dirty

class User
  validates_confirmation_of :password, :if => 'self.password_changed?'
  validates_presence_of :password, :if => 'self.password_changed?'
end

答案 3 :(得分:0)

调用#save并传递false以禁用该数据库更新的验证。

将您的控制器代码更改为:

@user = User.find(current_user.id)
@user.attributes = params[:user]
if @user.save(false)
    flash[:notice] = "Successfully updated user."
end

如果您依靠Paperclip进行图像验证,这会导致问题。它可能会掩盖格式错误的图像文件的一些问题,但它可能值得权衡。