Rap*_*elo 1 validation devise update-attributes ruby-on-rails-3
问题很简单,update_attributes是否验证了模型的每个可能的验证,即使我不想更新某些属性?
我有一个编辑视图,用户可能会在其中更改密码,但只有在他通过密码时才会更改密码,即如果密码不会更改.
所以我在控制器中执行以下操作:
def update
    params[resource_name].delete(:password) if params[resource_name][:password].blank?
    params[resource_name].delete(:password_confirmation) if params[resource_name][:password_confirmation].blank?
    params[resource_name].delete(:current_password) if params[resource_name][:current_password].blank?
    if resource.update_attributes(params[resource_name])
        ...
    end
end
我在模型上定义了以下验证:
validates :password,
          :length => { :within => 6..40 }
因此,每当我使用调用更新时,我都会收到一条错误消息,指出密码太短
Ps.:我正在使用Devise来解决这个问题.
编辑:你们有没有人知道如果Devise已经对密码进行了任何验证?因为,我删除了验证,它以正确的方式工作,但如果我输入一个简短的密码,它仍然显示验证,说它太短.
是的,如果您已通过,Devise会提供密码验证:可验证模型中的设计方法.密码长度的默认配置为6..128.您可以在config/initializers/devise.rb(第101行)中覆盖它.
您可以从模型中删除:validatable,如果您愿意,可以编写自己的验证.如果您这样做并且如果密码未传递给update_attributes则不希望运行验证,那么执行以下操作:
validates :password, :presence => true, :if => lambda { new_record? || !password.nil? }
| 归档时间: | 
 | 
| 查看次数: | 867 次 | 
| 最近记录: |