Я работаю над проектом направляющих, где я хочу позволить пользователям создавать отдельные примечания, которые являются действительно просто текстовыми полями в это время. С каждым примечанием пользователь может отредактировать то, что они ранее записали, но старая версия сохранена в таблице пересмотра. Я пытаюсь выяснить лучший способ приблизиться к этому.
Мои начальные мысли состоят в том, чтобы иметь следующие отношения:
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
Модель Note будет только содержать метку времени того, когда примечание было сначала создано. Модель NoteRevision будет содержать текст, а также метку времени для каждого пересмотра. Таким образом, каждый раз, когда новый пересмотр сделан, новая запись создается в таблицу NoteRevision, которая прослежена через таблицу Note. Надо надеяться, это имеет смысл!
Во-первых, это похоже на хороший способ сделать это? Если так, я испытываю затруднения при выяснении, как контроллер и представление представят эту информацию в одной форме. Есть ли какие-либо хорошие учебные руководства, или кто-то видел что-либо подобное, которое может указать на меня в правильном направлении?
Заранее спасибо!
Я бы посмотрел документальный след , который будет обрабатывать все версии за вас и поможет вам легко вернуть самую последнюю версию. За кулисами он делает что-то похожее на то, что вы пытаетесь сделать, но был тщательно протестирован и использовался многими людьми. Он также выигрывает от активного развития.
Другой вариант - драгоценный камень vestal_versions . На сайте Railscasts.com есть эпизод по его использованию: http://railscasts.com/episodes/177-model-versioning