Две модели, одна STI и валидация
Допустим, у меня есть две таблицы - Продукты и Заказы. Для простоты предположим, что за один раз можно купить только один продукт, поэтому нет таблицы объединения, такой как order_items. Таким образом, связь заключается в том, что у продукта много заказов, а заказ принадлежит продукту. Следовательно, product_id - это fk в таблице Order.
Таблица продуктов - STI - с подклассами A, B, C.
Когда пользователь заказывает подкласс Product C, необходимо проверить две специальные проверки в полях модели Order order_details и order_status. Эти два поля могут быть нулевыми для всех других подклассов Продукта (т. Е. A и B). Другими словами, не нужно выполнять проверку для этих двух полей, когда пользователь покупает A и B.
Мой вопрос:
Как записать проверки (возможно, настраиваемые?) В модель Order, чтобы модель Order знала, что нужно выполнять проверки только для двух полей ITS - order_details и order_status - когда подкласс fk_id для Product C сохраняется в таблице заказов?
1 ответ
Ключ должен добавить 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
модель определена.