验证Rails

时间:2015-06-23 19:35:05

标签: ruby-on-rails validation devise

嗨,这是我的用户模型

class User < ActiveRecord::Base

has_many :events

validates :cellphone, numericality:{ only_integer: true, message:"no es un numero"}, format: { with: /\d{11}/, message: "mal formato, deben ser 11 digitos, incluyendo codigo de area" }, :allow_blank => true
validates :phone, numericality:{ only_integer: true, message:"no es un numero"}, format: { with: /\d{11}/, message: "mal formato, deben ser 11 digitos, incluyendo codigo de area" }, :allow_blank => true
validates_numericality_of :cellphone, :on => :create, :message => "no es un numero", :allow_blank => true
validates_numericality_of :document, :on => :create, :message => "no es un numero", :allow_blank => true
validates :name, :presence => true
validates :lastname, :presence => true
validates :document, :presence => true, :uniqueness => true
validates :cellphone, :presence => true, :uniqueness => true
validates :phone, :presence => true, :uniqueness => true


validates_format_of :email,:with => Devise::email_regexp, :allow_blank => true

devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
end

我想证明,例如:手机,数字只有在它通过时:手机,:在线状态=&gt;真实的验证。

我已经阅读了StackOverflow中的所有帖子,但我似乎无法理解他们在做什么。

如果some1可以帮助我逐步完成这一步。

由于

1 个答案:

答案 0 :(得分:0)

:allow_blank => true 
:presence => true

作为评论中提到的@apneadiving,这两者相距180度。如果一个是真的,那么另一个应该是假的。你不能同时拥有两者。

您要问的是,当且仅当记录存在时,您要检查numericality。为此,您可以执行以下操作:

 validates :cellphone, numericality:{ ... }, format: { ... }, :allow_blank => true

通过这种方式,由于cellphone字段可以为空,因此numericality只会检查它是否存在。

另一个选项是:您可以传递一个块以检查该字段是否存在,并且确实存在,检查numericality

以下是:

 validate :cellphone, numbericality: { ... }, :if => lambda{ |object| object.cellphone.present? }