Hiho
Есть ли способ сказать рельсы, что моя строка не может быть "чем-то"?
Я ищу что-то вроде
validates :string, :not => 'something'
спасибо Klump
Hiho
Есть ли способ сказать рельсы, что моя строка не может быть "чем-то"?
Я ищу что-то вроде
validates :string, :not => 'something'
спасибо Klump
Любой из них выполнит задание (щелкните по методам документации):
Вероятно, лучший и быстрый способ, легко расширяемый для других слов:
validates_exclusion_of :string, :in => %w[something]
Это имеет преимущество использования регулярного выражения, поэтому вы можете легче обобщить:
validates_format_of :string, :without => /\A(something)\Z/
Вы можете перейти к другим словам с помощью /\A(something|somethingelse|somemore)\Z/
Это общий случай, с помощью которого вы можете выполнить любую проверку:
validate :cant_be_something
def cant_be_something
errors.add(:string, "can't be something") if self.string == "something"
end
Чтобы получить именно тот синтаксис, который вы предложили (validates :string, :not => "something"
), вы можете использовать этот код (предупреждение, хотя, я обнаружил это при чтении главной ветки источника рельсов, и он должен работать, но он не работает работа над моей установкой ~ 3 месяца). Добавьте это где-то на свой путь:
class NotValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
record.errors[attribute] << "must not be #{options{:with}}" if value == options[:with]
end
end
Несколько способов. Если у вас есть точный список того, чего он не может:
validates_exclusion_of :string, :in => ["something", "something else"]
Если вы хотите убедиться, что он вообще не существует подстрокой:
validates_format_of :string, :with => /\A(?!something)\Z/
Если это сложнее и вы хотите скрыть беспорядочные детали:
validate :not_something
def not_something
errors.add(:string, "Can't be something") if string =~ /something/
end