Поддерживает ли Ruby On Rails таблицу для каждого экземпляра схемы базы данных модели? - PullRequest
1 голос
/ 16 сентября 2009

У меня есть устаревшая база данных, в которой есть объекты, называемые «заметками». Каждая панель имеет запись в таблице заметок с информацией о заметке, такой как UUID, владелец и дата создания. Каждая версия фактического содержания заметки хранится в отдельной таблице в отдельной базе данных, где именем таблицы является UUID заметки. Каждая запись в таблице конкретной заметки представляет новую версию контента, чтобы облегчить отслеживание изменений, а что нет.

Известны ли вам способы реализации этой схемы в Ruby on Rails при соблюдении рекомендуемых рекомендаций?

Ответы [ 3 ]

1 голос
/ 16 сентября 2009

Я не думаю, что мы находимся в зоне наилучшей практики: вещь «один стол на заметку» действительно, действительно ужасна. Начните с вещи Note / Pad:

class Note < ActiveRecord::Base
  has_many :note_versions # don't see how this can work
end

Мы уже в беде, потому что (1) таблица версий не находится в той же базе данных и (2) это разные таблицы для каждого пэда. Я уже говорил, что это ужасно?

С чего начать с версий заметок?

class NoteVersion
  establish_connection THE_OTHER_DB # we know how to connect at least, I  hope?
  set_table_name '... # er, tricky - it changes
end

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

class Note < ActiveRecord::Base
  def note_versions
    NoteVersion.find_by_sql(['SELECT * FROM ?', self.uuid])
  end
end

class NoteVersion < ActiveRecord::Base
  establish_connection THE_OTHER_DB # as above
  # maybe override all the "normal" AR methods to stop it trying to work
  # with a non-existent "note_versions" table?
end

Я отказался от ассоциаций (вероятно, без больших потерь, если вы не хотите обновлять), но я думаю, что это может быть возможным способом продвижения вперед. Я расширяю свои знания ActiveRecord дальше, чем обычно, - может быть, у кого-то будет знание, которого нет у меня; это было бы хорошо.

0 голосов
/ 28 ноября 2009

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

0 голосов
/ 16 сентября 2009
  1. : pad has_one: note. : note note_to: pad
  2. Используйте плагин vestal-version для создания версий ваших заметок. Нет необходимости хранить в отдельной базе данных.
  3. Готово.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...