开发者

Rails 3 validates rule based on action

This seems like a simple question but I can't seem to find an answer short of writing custom validators. I have this validator

validates :password, :presence => true, :confirmation => true, :length => { :minimum => 5}

there are more rules applied such as some regex for complexity, but this gives the gist.

The issue is that I only want presence applied on create, everything else needs to be on create and update. Because the user may not be changing a password when updating their information.

I tried splitting the rules

validates :password, :presence => true, :on => :create
validates :password, # The rest of the rules

This resu开发者_如何学JAVAlted in all rules being ignored for update. Is there a simple way to apply only one rule to create and the rest to everything?


You can try keeping it in one line, but applying :on => :create to just the :presence check:

validates :password, :presence => {:on => :create}, :confirmation => true, :length => { :minimum => 5}

However, I'm not sure it makes sense to always require a minimum length, but not always require presence -- if you update an existing record with a blank password, it's going to fail validations anyway since the length is 0.


My hunch is that the problem is that the validate :password call is not additive. Can you switch the presence check to:

validates_presence_of :password, :on=>:create

And then keep your other validations using the validate. Does that work?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜