使用状态和正则表达式格式进行Rails验证

时间:2014-03-26 10:24:58

标签: ruby-on-rails ruby regex validation ruby-on-rails-4

我有两种情况,当有人留空时,我不喜欢。

1)字段已通过presence: trueformat验证进行验证:

validates :name, presence: true, format: { with: /\A[[:alnum:]]+\z/, message: 'can only have letters and numbers' }

问题是如果有人将name留空,则会显示2个错误。我只希望"名称不能为空白"显示的错误信息,让名称只能包含字母和数字并不合理#34;输入任何内容时显示错误消息。

2)字段仅使用format进行验证:

validates :name, format: { with: /\A[[:alnum:]]+\z/, message: 'can only have letters and numbers' }

在这种情况下,将字段留空是可以的。不幸的是,如果它实际上是空白的,用户将收到一条错误消息,因为它没有通过正则表达式。我知道我可以改变正则表达式以包含一个空字符串(至少我认为我可以通过前置|)。我的正则表达式通常比[[:alnum:]]+复杂得多,因此只需将+更改为*即可。

我的问题是,如果Rails有更好的方法来处理这两种情况吗?

1 个答案:

答案 0 :(得分:2)

allow_blank: true添加到选项中。

validates :name, presence: true, 
                 format: { allow_blank: true, with: /\A[[:alnum:]]+\z/, message: 'can only have letters and numbers' }