Rails: прогрессивная валидация, использование STI или что-то другое? - PullRequest
1 голос
/ 01 августа 2011

У меня есть приложение rails, где пользователи делятся фотографиями определенного типаВ настоящее время приложение требует, чтобы фотографии были классифицированы несколькими способами, прежде чем они станут действительными, поэтому пользователи должны загружать фотографии по одной и классифицировать их, чтобы сохранить их в базе данных.

Категоризация занимает некоторое время, поэтому яХотелось бы разрешить пользователям загружать пакеты фотографий, а затем возвращаться и классифицировать их, когда у них есть время, но когда фотографии хранятся без полной категоризации, я не хочу, чтобы они смешивались с "полными" фотографиями.

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

Мой вопрос: как бы вы подошли к такой проблеме?

Я думал об использовании наследования одной таблицы для создания двух подклассов Photo: IncompletePhoto и CompletePhoto.Для IncompletePhoto потребуется только сам файл изображения, а для CompletePhoto потребуется категоризация.Пользователи могут просматривать свои собственные IncompletePhotos, но результаты поиска в приложении будут возвращать только CompletePhotos.

Похоже ли это на правильный подход к проблеме, которую я пытаюсь решить, или есть лучший способ?Я никогда раньше не использовал ИППП, и я не уверен, что это хорошая идея.

1 Ответ

0 голосов
/ 01 августа 2011

Я бы сказал, что STI был создан, чтобы быть полезным, когда у вас есть разные объекты с некоторыми, но не всеми общими свойствами, для случаев, когда вы получите выгоду от DRYкак в базе данных, так и в моделях.Я не уверен, есть ли способ правильно изменить тип экземпляра такой модели.Что ж, вы можете просто изменить сам столбец type, но класс объекта Ruby будет таким же, как и проверки, если только вы не будете повторно выбирать модель после сохранения, а затем запускать проверки вручную.Последнее звучит как грязный хак для меня.

Как правильный способ, я бы предложил вам добавить столбец complete и использовать валидаторы в форме validates ..., :if => :complete.

...