Rails验证字段为True,如果存在

时间:2017-06-21 05:11:19

标签: ruby-on-rails

我发现有很多关于如何验证某个字段的帖子,如果其他条件为真,例如:

Rails: How to validate format only if value is present?

Rails - Validation :if one condition is true

但是,我该怎么做呢?

我的用户有一个名为terms_of_service的属性。

如何最好地编写检查terms_of_service == true的验证,如果存在?

2 个答案:

答案 0 :(得分:2)

您正在寻找acceptance validation

您可以像这样使用它:

class Person < ApplicationRecord
  validates :terms_of_service, acceptance: true
end

或其他选项,如下:

class Person < ApplicationRecord
  validates :terms_of_service, acceptance: { message: 'must be abided' }
end

<强> [编辑]

您可以将字段所需的选项设置为单个项目或数组。因此,如果您将字段存储在隐藏属性中,则可以检查它是否仍然被接受&#34;但是你描述了接受:

class Person < ApplicationRecord
  validates :terms_of_service, acceptance: { accept: ['yes', 'TRUE'] }
end

答案 1 :(得分:1)

我无法想到任何可以达到您目的的默认验证方法,但您可以使用自定义验证。此外,布尔值可以是truthy或falsy ,因此您只需检查其是否为真。这样的事情应该有效。

validate :terms_of_service_value

def terms_of_service_value
  if terms_of_service != true
    errors.add(:terms_of_service, "Should be selected/True")
  end
end