5

Мой вопрос: должен ли я сверлить собственное моделирование версий или использовать один из версий, которые уже существуют? Если я должен использовать драгоценный камень, какой из них лучше всего подходит для этого приложения?Приложение 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: через ассоциации. Я должен быть очень осторожен, чтобы обновить все таблицы и правильно подключить таблицы. (Это также может быть проблемой с одним из драгоценных камней).
  • Поскольку я использую данные этой версии для отчетности, меня беспокоят проблемы с производительностью. Размышляющие хэши кажутся вычислительно дорогостоящими, тогда как использование плоских таблиц с индексами кажется довольно эффективным.
  • Оба драгоценных камня кажутся более ориентированными на сохранение истории версий для отслеживания, а не на сохранение исторической информации для целей отчетности.

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

ответ

-3

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

  1. Закрепить их ошибки
  2. Поддержка последнее обновление Рельсы обновление/рубиновый и т.д.
  3. Не конфликтуйте с каким-либо способом с вашим приложением тонким способом, с которым вы не можете обратиться (требуются разные версии зависимых драгоценных камней).

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

+0

Ричард, это отличный ответ. Я собираюсь немного отложить голосование, это предпочтительный ответ, если у кого-то есть что-то более острое, но мне нравятся ваши рассуждения и соглашаются с ним. Спасибо за ваш продуманный ответ! – JoshDoody

+0

Вы в конечном итоге катались? –

+0

Алекс, я в конечном итоге катился самостоятельно. Это было очень сложно, но я думаю, что это было, вероятно, лучше всего. Мне нужно будет сделать некоторые отчеты и аналитику с историческими данными, и важно, чтобы у меня был доступ к исходным объектам для создания отчетов. Недостатком является то, что я, возможно, переработал свое решение (и, следовательно, сделал это слишком сложно). Я не буду знать, правда ли это, пока я действительно не запускаю приложение через его шаги. – JoshDoody

44

Используйте PaperTrail и не откатывайте свое собственное решение. Я категорически не согласен с ответом Ричарда. PaperTrail - очень активный проект, в котором многие люди вносят свой вклад в исправления ошибок, поддерживают последние версии Rails и Ruby и управляют конфликтами gem.

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

+5

Согласитесь с этим настроем. Когда вам не хватает часов для кодирования, получение функциональности без необходимости ее обновления само по себе является положительным. Вам не нужно тратить лишние часы, чтобы поддерживать библиотеку самостоятельно только при незначительных выигрышах. Это Ruby, вам проще добавить небольшую функциональность, которая вам понадобится (и запустить тесты на ней), а также нажать вверх по течению или сохранить локальные принципы с открытым закрытием в отношении вашего приложения. – tadiou

+0

Как этот камень с производительностью? – Sid

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

  • Нет связанных вопросов^_^