Переопределение или псевдоним имени столбца в устаревшей базе данных с использованием Rails / ActiveRecord - PullRequest
3 голосов
/ 03 декабря 2010

Я пишу приложение Rails для устаревшей базы данных.Одна из таблиц в этой устаревшей базе данных имеет столбец с именем object_id.К сожалению, object_id также является атрибутом каждого объекта в Ruby, поэтому, когда ActiveRecord пытается использовать эти объекты для формулирования запроса, он использует Ruby, определенный object_id, а не значение, которое находится в базе данных.

Устаревшее приложение содержит более миллиона строк кода, поэтому простым изменением имени столбца в базе данных будет последний вариант.

Вопросы:
1. ЕстьЕсть ли способ заставить ActiveRecord / Rails использовать псевдоним или синоним для этого столбца?
2. Есть ли способ в Ruby заставить метод object_id вести себя по-разному, в зависимости от того, кто его вызывает?
3.Могу ли я просто переопределить поведение метода object_id в моей модели (я предполагаю, что это ужасная идея, но я должен был спросить)

Любые предложения приветствуются.

Ответы [ 2 ]

2 голосов
/ 03 декабря 2010

Я просто немного болтаюсь здесь, но вы можете попробовать что-то вроде этого:

class Legacy < ActiveRecord::Base
  #... all the other stuff

  #give yourself a way to access the DB version of object_id
  def oid
    attributes[:object_id]
  end
  def oid=(val)
    attributes[:object_id]=val
  end

  #restore ruby's default #object_id implementation
  def object_id
    super
  end
end
0 голосов
/ 16 февраля 2013

Проверьте alias_attribute http://www.railstips.org/blog/archives/2008/06/20/alias-attribute/ Я считаю, что он делает то, что вы ищете.

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