Как ограничить значения для столбца - PullRequest
12 голосов
/ 11 ноября 2011

Я хочу ограничить доступные значения для поля.Таким образом, значение столбца должно быть из указанного набора значений.Возможно ли использовать миграцию / модели?Или я должен сделать это вручную в моей БД?

Ответы [ 2 ]

26 голосов
/ 11 ноября 2011

Вы будете использовать проверки для этого.Есть целое руководство по Rails по теме .В этом случае вам нужен конкретный помощник :inclusion, например:

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

Редактировать август 2015: Начиная с 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

2 голосов
/ 11 ноября 2011

Это зависит от степени доверия, которое вам нужно.Вы можете просто добавить валидатор в вашу модель, чтобы ограничить его этими значениями, но тогда вы не будете уверены, что существующие данные будут совпадать (и приведет к сбою последующего сохранения из-за проверки), а также что другие изменения могут быть внесены другими приложениями /raw sql, что бы обойти это.

Если вы хотите абсолютной уверенности, используйте базу данных.

Вот что вы можете использовать, если делаете это в базе данных (что весьма ограничено по сравнению с тем, что может делать валидатор rails: http://www.w3schools.com/sql/sql_check.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...