Единственное наследование таблицы (STI) Ruby on Rails и проблема модульного теста (с PostgreSQL)

Я бы рекомендовал использовать подкласс 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
        }
    }
}
5
задан womble 14 March 2009 в 21:02
поделиться

3 ответа

Оказывается, что проблема происходила из-за присутствия:

./test/fixtures/technicians.yml./test/fixtures/users.yml

Это имеет смысл, поскольку платформа ожидала мочь вставить данные в столь же именованные таблицы.

12
ответ дан 18 December 2019 в 13:19
поделиться
  • Вы удостоверялись, что Ваша таблица учетных записей включает столбец 'типа'? Вам нужен тот, чтобы заставить STI работать.
  • Я на самом деле испытал некоторые затруднения совместимости базы данных из-за столбца, названного 'типом', и иногда переключался на 'вид' для облегчения этого. Это могло бы быть проблемой; попытайтесь установить сам inheritance_column = "вид" в базовом классе (Учетная запись) и посмотрите, помогает ли это.
0
ответ дан 18 December 2019 в 13:19
поделиться

У меня была аналогичная проблема, которая была решена путем удаления YAML-файл для дочерней модели. По сути, rails смотрит на приборы, созданные в / test / fixtures /, и пытается очистить таблицы для каждого, чтобы перезагрузить их для вас.

В моем случае я выполнил команду script / generate model, которая автоматически создает новый прибор. Затем я изменил модель, чтобы унаследовать от правильного родительского класса. Ну, поскольку прибор все еще существовал, rails пытался УДАЛИТЬ ИЗ дочернего элемента перед загрузкой приборов.

Если вам действительно нужно предварительно загрузить данные, вы должны использовать приспособление родительских моделей и установить в поле типа правильное имя модели.

2
ответ дан 18 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: