2014-01-26 3 views
0

Предположим, у вас есть модель продукта, которая считается действительной при создании без цены. Но не разрешено появляться на сайте без цены.Проверка модели Rails в другом контексте

Возможно, это не лучший пример, но просто пойдите с ним.

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

ответ

1

Валидация - это инструмент, позволяющий создавать или сохранять недопустимые поля. Для отображения это скорее фильтр, который предотвращает отображение действительных объектов. Вы можете использовать условные проверки, но это не влияет на отображение, а только сохранение.

Вы можете настроить область или метод фильтра для элементов, которые вы хотите отобразить. Например.

scope :visible, where('price is not NULL') 

Или, если условие будет слишком сложным (как проверка более нескольких полей) вы должны ввести новое поле (вероятно flaglike) для хранения, если запись готова для отображения. Он может быть изменен при сохранении модели.

before_save :update_ready_to_display 
def update_ready_to_display 
    ... # checking code here 
end 
scope :visible, where(ready_to_display: true) 

Если условие является динамическим (например, в зависимости от текущей даты, времени для ограниченных элементов), или действительно сложным (например, требует графа зависимостей, пункты действительны, если все подпункты действительны, и т.д ...) вы либо отправляетесь на первое медленное решение, либо пытаетесь сделать заданную по времени задачу пересчитать видимость для отдельных элементов.

Смежные вопросы