【问题标题】:Validation Rails验证 Rails
【发布时间】:2015-06-23 19:35:04
【问题描述】:

你好,这是我的用户模型

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

我想验证,例如:手机,数字只有通过 :cellphone, :presence => 真正的验证。

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

如果 some1 可以一步一步地帮助我。

谢谢

【问题讨论】:

  • 您允许空白并验证存在和唯一性。这是矛盾的

标签: ruby-on-rails validation devise


【解决方案1】:
: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? }

【讨论】:

  • 不,我要问的是验证的优先顺序,比如如果存在是真的验证数字,然后如果数字通过然后验证格式,但我的项目验证所有并显示两个错误消息
  • 您可以编写一个正则表达式,它可以同时检查数字和格式。这就是我所做的。如果数字为真,为什么您想检查格式?让格式处理这两种情况。
  • 我想同时检查它们,但为什么同时显示两个错误消息...它杀了我,它显示“手机不是数字”“手机格式错误”它显示验证格式是否通过然后检查它是否是一个数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
相关资源
最近更新 更多