Добавление связанной таблицы в существующую таблицу (Книга> Редакция) - PullRequest
1 голос
/ 11 сентября 2010

У меня есть следующие модели:

class Instance < ActiveRecord::Base 
 has_many :users 
 has_many :books 
end 
class User < ActiveRecord::Base 
 belongs_to :instance 
end 
class Book < ActiveRecord::Base 
 belongs_to :instance 
end 

Теперь я хочу добавить таблицу BookRevision, которая имеет следующие столбцы (id, user_id, version # (автоинкремент), diff (копия старой книги), отметки времени) Логика:

  • Когда книга создается, запись добавляется в таблицу BookRevision, поэтому мы знаем, кто создал книгу в первую очередь
  • Когда книгаОбновленная запись добавляется с идентификатором пользователя (может быть другим пользователем) и новой версией

    и текстом старой книги в качестве архива.

Даночто в моем рельсе добавлена ​​таблица «Экземпляр, пользователь, книга», это правильные шаги для воплощения вышеизложенного в жизнь?- Добавить миграцию для таблицы BookRevision .... rails генерировать миграцию AddTableBookRevision user_id: целочисленная версия: integer diff: text - Затем обновите модели следующим образом:

class Instance < ActiveRecord::Base 
 has_many :users 
 has_many :books 
end 
class User < ActiveRecord::Base 
 belongs_to :instance 
end 
class Book < ActiveRecord::Base 
 belongs_to :instance 
 has_many :BookRevisions 
end 
class BookRevision  < ActiveRecord::Base 
 belongs_to :Book 
end 

Затем в моем контроллере при добавленииновая книга?Прямо сейчас у меня есть:

@book = Book.create(params[:book].merge(:instance_id => 
current_user.instance_id)) 

Как мне обновить это, чтобы учесть ассоциацию BookRevision?Спасибо за помощь!

1 Ответ

1 голос
/ 12 сентября 2010

Возможно, вы захотите проверить что-то вроде acts_as_versioned вместо того, чтобы бросать свои собственные. Это работает так, как вы описали здесь, где изменения сохраняются в отдельной, но связанной таблице.

Имейте в виду, что с этого момента вам придется применять миграцию к вашей таблице Book и BookRevision параллельно. Они должны быть совместимы со схемой для исправления для работы.

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

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