Мой вопрос: должен ли я сверлить собственное моделирование версий или использовать один из версий, которые уже существуют? Если я должен использовать драгоценный камень, какой из них лучше всего подходит для этого приложения?Приложение Rails 3.2 - Должен ли я использовать драгоценный камень версии (paper_trail или vestal_versions) или обрабатывать его вручную?
Информация о моем приложении
Мое приложение представляет собой простой Контрольный список приложений. Есть контрольные списки и задания, и я отслеживаю ответы пользователей с ответами и материалами. Ответ говорит мне, что сказано в сказанном («Сделано» с запиской «Нам нужно больше швабр»), и в представлении мне сообщается, когда этот конкретный контрольный список был заполнен (потому что может быть много представлений и наборов ответов для данного контрольный список). Я покажу свои ассоциации ниже, в случае, если это поможет.
#checklist.rb
class Checklist < ActiveRecord::Base
has_many :jobs, :through => :checklists_jobs
has_many :submissions
end
#job.rb
class Job < ActiveRecord::Base
has_many :checklists, :through => :checklists_jobs
has_many :responses
end
#response.rb
class Response < ActiveRecord::Base
belongs_to :job
belongs_to :submission
belongs_to :user
end
#submission.rb
class Submission < ActiveRecord::Base
belongs_to :user
belongs_to :checklist
has_many :responses
end
То, что я пытаюсь сделать с версиями
То, что я хочу сделать, это реакция звукозаписывающие пользователей на работу на контрольных списках. Но я хочу убедиться, что я могу воспроизвести исходный контрольный список (с информацией об ответах), если контрольный список изменится. Например, я хочу удостовериться, что могу ответить на этот вопрос для всех предыдущих версий контрольного списка:
«Как выглядел контрольный список и какими были ответы три вторника назад?»
Я не хочу потерять ответ на этот вопрос, если я изменю контрольный список или любую его работу.
Я думаю, что лучший способ сделать это - использовать управление версиями (для заданий и контрольных списков). Например, если задание изменено (имя или описание) администратором, то я не обновляю существующее задание, но создаю новую версию и оставляю старую версию неповрежденной. Затем я просто оставляю старые вещи на месте и указываю контрольный список на новую версию задания.
Должен ли я использовать драгоценный камень или рулон самостоятельно?
Что я пытаюсь решить, должен ли я просто свернуть свой собственный (написать код, чтобы увеличить версию, указать все на версию и сохранить предыдущую версию) или использовать существующее решение. Два лучших решения кажутся paper_trail и vestal_versions. У меня недостаточно очков репутации, чтобы разместить более двух ссылок, поэтому я свяжусь с каждым из Railscast gem (который, если хотите, доставит вас к самому камню). Railscast 255 Undo with paper_trail и Railscast 177 Model Versioning - 177 использует vestal_versions.
Pros к прокатке моей:
- мне нужно сообщить о всех исторических данных путем восстановления контрольных перечней и их ответов. Это основная особенность приложения. Кажется, это будет сложно с драгоценностями, о которых я упоминал.
- Я смогу сообщить о группах версий («Я хочу видеть все ответы для любой версии этого задания»). Это кажется таким простым.
Cons к прокатке моей:
- Это будет сложно, потому что у меня есть несколько has_many: через ассоциации. Я должен быть очень осторожен, чтобы обновить все таблицы и правильно подключить таблицы. (Это также может быть проблемой с одним из драгоценных камней).
- Поскольку я использую данные этой версии для отчетности, меня беспокоят проблемы с производительностью. Размышляющие хэши кажутся вычислительно дорогостоящими, тогда как использование плоских таблиц с индексами кажется довольно эффективным.
- Оба драгоценных камня кажутся более ориентированными на сохранение истории версий для отслеживания, а не на сохранение исторической информации для целей отчетности.
Это кажется важным, потому что все, что я решаю, в основном застрял. Я не думаю, что будет легче перейти от одного метода к другому позже.
Ричард, это отличный ответ. Я собираюсь немного отложить голосование, это предпочтительный ответ, если у кого-то есть что-то более острое, но мне нравятся ваши рассуждения и соглашаются с ним. Спасибо за ваш продуманный ответ! – JoshDoody
Вы в конечном итоге катались? –
Алекс, я в конечном итоге катился самостоятельно. Это было очень сложно, но я думаю, что это было, вероятно, лучше всего. Мне нужно будет сделать некоторые отчеты и аналитику с историческими данными, и важно, чтобы у меня был доступ к исходным объектам для создания отчетов. Недостатком является то, что я, возможно, переработал свое решение (и, следовательно, сделал это слишком сложно). Я не буду знать, правда ли это, пока я действительно не запускаю приложение через его шаги. – JoshDoody