Как должен подходить, позволяя пользователям создавать заметки с ревизиями? - PullRequest
1 голос
/ 27 апреля 2010

Я работаю над проектом Rails, в котором я хочу позволить пользователям создавать отдельные заметки, которые на самом деле являются просто текстовыми полями в настоящее время. С каждой заметкой пользователь может редактировать написанное ранее, но старая версия хранится в таблице редакций. Я пытаюсь найти лучший способ подойти к этому.

Мои первоначальные мысли состоят в том, чтобы иметь следующие отношения:

class User < ActiveRecord::Base
  has_many  :notes
end

class Note < ActiveRecord::Base
  has_many :note_revisions
  belongs_to :user
end

class NoteRevision < ActiveRecord::Base
  belongs_to :note_revision
end

Модель заметки будет содержать только отметку времени, когда заметка была впервые создана. Модель NoteRevision будет содержать текст, а также временную метку для каждой ревизии. Таким образом, каждый раз, когда производится новая редакция, в таблицу NoteRevision создается новая запись, которая отслеживается через таблицу Note. Надеюсь, это имеет смысл!

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

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 27 апреля 2010

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

0 голосов
/ 28 апреля 2010

Другой вариант - драгоценный камень vestal_versions . У Railscasts.com есть эпизод по его использованию: http://railscasts.com/episodes/177-model-versioning

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...