论坛首页 编程语言技术论坛

更新用户部分字段时跳过密码校验

浏览 2890 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-03   最后修改:2008-11-19
如果在User 模型中有定义:

validates_length_of :password,:within => 6..40


此时如果想使用如下更新user的元素
@user.update_attributes(:email => params[:user][:email], :im => params[:user][:im])

就会因为密码校检不通过而失敗


在这里  http://www.iteye.com/topic/177000 看到这問題,看到里面的解决方案都不算很好,于是另开一贴记下自己的看法


解决方案就是使用如下来定义user的模型:
validates_length_of :password,:within => 6..40,:if => :password_required?


  def password_required?
    hashed_password.blank? || !password.blank?
  end

这样就是只有 在用户没有密码时 或者 用户输入含有 password 部分 才要求校检密码,OK問題应该完美解决了
   发表时间:2008-11-04  
我好像
   1. @user.update_attributes(:email => params[:user][:email], :im => params[:user][:im]) 
直接这样就可以了哦
0 请登录后投票
   发表时间:2008-11-04  
bugx 写道
我好像
   1. @user.update_attributes(:email => params[:user][:email], :im => params[:user][:im]) 
直接这样就可以了哦


Realy?  http://www.iteye.com/topic/177000 难道这楼楼主RP不好 

呵呵,不过我用  @user.update_attributes(params[:user])  这样肯定不行,所以就使用到了上面的方法。
0 请登录后投票
   发表时间:2008-11-06  

更新单个字段可以用
@user.update_attribute_with_validation_skipping(name,value)

更新多个的话
试试 update_all 吧
0 请登录后投票
   发表时间:2008-11-06  
wosmvp你用的版本是多少?
我记得2.1版本以后有partial update
update_attributes可以跳过字段校验
0 请登录后投票
   发表时间:2008-11-06  
Quake Wang 写道
wosmvp你用的版本是多少?
我记得2.1版本以后有partial update
update_attributes可以跳过字段校验


我用 Rails2.1.0 开发测试,不可以跳过的
0 请登录后投票
   发表时间:2008-11-06  
Quake Wang 写道
wosmvp你用的版本是多少?
我记得2.1版本以后有partial update
update_attributes可以跳过字段校验


partial update为true时,并不能跳过validation吧
只是并发update的时候,能够使一条记录处于invalid状态。
0 请登录后投票
   发表时间:2008-11-10  
validates_length_of :password, :in => 6..20, :allow_nil => true

这样不更好么?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics