Две модели, одна ИППП и проверка
-
23-09-2019 - |
Вопрос
Допустим, у меня есть два стола - продукты и заказы. Для простоты предположим, что только один продукт можно приобрести за раз, так что нет таблицы соединения, как order_items. Таким образом, отношения в том, что у продукта есть много заказов, а порядок принадлежит продукту. Следовательно, product_id является FK в таблице заказа.
Таблица продукта состоит из STI - с подклассами являются A, B, C.
Когда пользователь заказывает продукт подкласса C, два специальных валидации должны быть проверены в полях модели заказа order_details и order_status. Эти два поля могут быть нулевыми для всех других подклассов продукта (т.е. A и B). Другими словами, не требуется валидация для этих двух полей, когда пользователь покупает A и B.
Мой вопрос:
Как написать проверки (возможно, на заказ?) В модели заказа, чтобы модель заказа знала, чтобы запустить только проверки для своих двух полей - order_details и order_status - когда FK_ID для подкласса продукта C сохраняется в таблице заказов ?
Решение
Ключ - добавить validate
Метод в Order
модель, чтобы проверить конкретные характеристики:
def validate
if product and product.type_c?
errors.add(:order_details, "can't be blank") if order_details.blank?
# any other validations
end
end
Или что-то вдоль этих линий. Просто проверьте, чтобы получить тип validate
и добавьте соответствующие ошибки. Я только что придумал type_c?
функция Просто проверьте тип, однако ваш Product
модель определена.