Сопоставление атрибутов модели Rails с полями в устаревшей таблице - PullRequest
2 голосов
/ 18 марта 2011

Нам нужно использовать устаревшую базу данных mysql в приложении rails. Я уже разобрался со всеми своими соединениями, первичными ключами и прочим. Однако некоторые из старых таблиц имеют более 100 полей (мягко говоря, не очень нормированных), и большинство из этих полей имеют имена, такие как par1, minvprono и т. Д.

Каков наилучший способ сопоставления / псевдонима этих полей с обычными именами?

  • Методы:

    def invoice_number
      self.MINVPRONO
    end
    
    
    def invoice_number=(invoice_number)
      self.MINVPRONO = invoice_number
    end
    
  • 1012 * псевдоним *

    alias_attribute :invoice_number , :MINVPRONO
    

Не могу придумать другого пути. Каков наилучший подход, если я хочу иметь возможность использовать все "магические методы", созданные методом отсутствия, т. Е. Find_by_invoice_number и т. Д.?

Я использую Rail 3.0.5 на Ruby 1.9.2, а db - это Mysql 5.0.45

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

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

Как насчет (обновляемых) представлений на MySQL, которые имитировали бы правильный способ проектирования таблиц? http://dev.mysql.com/doc/refman/5.0/en/view-updatability.html

0 голосов
/ 21 марта 2011

Хорошо. Закончилось делать псевдонимы - это кажется и приемлемый способ работы в Rails.Псевдоним это.Для всех, кто ищет информацию: rails blog .Также следует отметить, что в рельсах 3 - 3.0.3 он не работал из-за отсутствия поддержки в арле - это то, что меня оттолкнуло.Модернизированный с тех пор, и, кажется, теперь все в порядке.

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