Я бы рекомендовал использовать подкласс UITextField с 2 состояниями пользовательского интерфейса (обычный / недействительный) и правилом проверки (например, не пусто / соответствовать регулярному выражению / и т. Д.)
class ValidationTextField: UITextField {
enum ValidationRule {
case notEmpty
// case matchRegex(regex: NSRegularExpression)
// ...
}
var validationRule: ValidationRule?
private(set) var isValid:Bool = true {
didSet {
updateUIForCurrentState()
}
}
// Call this method on the "next" button click
// (or from the delegate on the textFieldDidEndEditing event for early validation)
func validate() {
guard let rule = validationRule else {
// nothing to validate
return;
}
switch rule {
case .notEmpty:
if let length = text?.count {
isValid = length > 0
}
else {
isValid = false
}
// process other cases (e.g. matchRegex)
}
}
/// Configure your state-specific layout here.
private func updateUIForCurrentState() {
// Current implementation adds a red border in case of invalid input
if isValid {
layer.borderWidth = 0
layer.borderColor = nil
}
else {
layer.borderWidth = 2
layer.borderColor = UIColor.red.cgColor
}
}
}
Оказывается, что проблема происходила из-за присутствия:
./test/fixtures/technicians.yml./test/fixtures/users.yml
Это имеет смысл, поскольку платформа ожидала мочь вставить данные в столь же именованные таблицы.
У меня была аналогичная проблема, которая была решена путем удаления YAML-файл для дочерней модели. По сути, rails смотрит на приборы, созданные в / test / fixtures /, и пытается очистить таблицы для каждого, чтобы перезагрузить их для вас.
В моем случае я выполнил команду script / generate model, которая автоматически создает новый прибор. Затем я изменил модель, чтобы унаследовать от правильного родительского класса. Ну, поскольку прибор все еще существовал, rails пытался УДАЛИТЬ ИЗ дочернего элемента перед загрузкой приборов.
Если вам действительно нужно предварительно загрузить данные, вы должны использовать приспособление родительских моделей и установить в поле типа правильное имя модели.