如何限制列的值

时间:2011-11-10 21:45:39

标签: ruby-on-rails

我想限制字段的可用值。因此,列的值必须来自指定的值集。是否可以使用迁移/模型?或者我必须在我的DB中手动完成它?

2 个答案:

答案 0 :(得分:26)

您将使用验证。那里有a whole Rails guide on the topic。在这种情况下,您正在寻找的具体帮助者是:inclusion,例如:

class Person < ActiveRecord::Base
  validates :relationship_status,
    :inclusion  => { :in => [ 'Single', 'Married', 'Divorced', 'Other' ],
    :message    => "%{value} is not a valid relationship status" }
end

编辑2015年8月:从Rails 4.1开始,您可以使用enum类方法。它要求您的列是整数类型:

class Person < ActiveRecord::Base
  enum relationship_status: [ :single, :married, :divorced, :other ]
end

它也会自动为您定义一些方便的方法:

p = Person.new(relationship_status: :married)

p.married? # => true
p.single? # => false

p.single!
p.single? # => true

您可以在此处阅读enum的文档:http://api.rubyonrails.org/v4.1.0/classes/ActiveRecord/Enum.html

答案 1 :(得分:2)

这取决于您需要的信心量。您可以在模型中添加验证器以将其限制为这些值,但是您不会确定现有数据是否匹配(并且会因验证而导致后续保存失败)以及其他应用程序可能会进行其他更改/原始的sql会绕过它。

如果您想要绝对自信,请使用数据库。

如果您在数据库中执行此操作,可能需要使用以下内容(与rails验证器相比,这可能非常有限:http://www.w3schools.com/sql/sql_check.asp