2012-03-02 12 views
6

Buduję aplikację rails wokół kilku istniejących baz danych, nazwy kolumn używane w istniejących bazach danych nie działają dobrze z konwencjami stowarzyszeń rails. Czy istnieje sposób, aby ustawić nazwę kolumny aliasy w modelu podobnym do sposobu możnaRęcznie ustawiana nazwa kolumny w modelu szynowym

class User < Activerecord::Base 
self.set_table_name "users" 
end 

można ustawić nazwę kolumny aliasy gdy istniejące kolumny db nie będzie działać z domyślnymi stowarzyszenie szyny konwencji nazewnictwa?

Odpowiedz

13

W swoim modelu wystarczy ustawić alias dla atrybutów (kolumn). Na przykład:

class User < Activerecord::Base 
    alias_attribute :new_column_name, :real_column_name 
end 
+0

Dokładnie to, czego potrzebowałem, dziękuję. – holaSenor

+0

Znalazłem również ten blog z kilkoma innymi wskazówkami związanymi z tym tematem.http: //nasir.wordpress.com/2007/10/24/not-following-rails-table-and-field-conventions/ – holaSenor

+1

Uwaga szukacze dynamiczne będą nie działa jednak. Szybki test: 'alias_attribute: testy,: username' ' User.find_by_username ('abc') id' '=> 32' ' User.find_by_test ('ABC') id' .. 'NoMethodError: undefined metoda 'find_by_test' dla # ' – Zheileman

2

Jeśli jesteś w stanie modyfikować kolumny bazy danych (to tylko aplikacja szyny odwołuje go) można napisać migracji przy użyciu metody rename_column. Ponieważ używasz szyny 3 można po prostu użyć następującego polecenia

~: rails g migration RenameColumnNameToNewColumn columnName:columnType

Oczywiście zastąpić ogólne nazewnictwa, co działa najlepiej dla Ciebie. Powinno to stworzyć migracji dla ciebie, który wygląda mniej więcej tak, a jeśli nie, to do modyfikacji wygląda podobnie do kodu poniżej

class ChangeOldColumnToNewColumn < ActiveRecord::Migration 
     def up 
      rename_column :tableName, :oldColumn, :newColumn 
     end 

     def down 
      rename_column :tableName, :newColumn, :oldColumn 
     end 
end 

Jeśli jesteś nie w stanie zmienić nazwę kolumny w Rzeczywisty stół, w którym można umieścić linię podobną do tej w swoim modelu, która powinna osiągnąć to, co próbujesz zrobić.

alias_attribute :newColumnName, :existingColumnName 

Może być konieczne umieszczenie istniejącej nazwy kolumny w cudzysłowach, jeśli nazwa kolumny jest myląca.

+0

Mam zamiar tego spróbować, ale Zheilman ma punkt znalezienia przez nie będzie działać, co może stać się mylące. Mogę po prostu odszukać potrzebne dane w nowej bazie szyn i użyć połączenia connect_connection do połączenia. – holaSenor

+0

To jest interesujący punkt, który wychował, chciałbym usłyszeć, jak to skończy się dla ciebie. – coderates

+1

Jeśli możesz zmienić nazwę tych kolumn, to na pewno jest to droga, jako że Railsy nie będą dobrze odtwarzać konwencji, a będziesz musiał "oszukać" zbyt wiele rzeczy na dłuższą metę. Wszystko zależy od tego, ile masz kontroli nad schematem bazy danych i ile "błędnych kolumn" ma (może tylko za 1 lub 2 można przejść z trudną drogą). – Zheileman

Powiązane problemy