2011-02-22 1 views
2

J'ai l'ancienne table appelée "DXFTACCTS", et j'ai créé le modèle "Compte" de Rails.Rails 3 mappant certaines colonnes à différents attributs de modèle

class Account < ActiveRecord::Base 
    set_table_name "DXFTACCTS" 
end 

Le problème est que DXFTACCTS a des domaines comme « XORFNAME » que je veux être « prenom » dans le modèle, et ainsi de suite. Comment "mapper" des colonnes de table spécifiques aux attributs de modèle?

Merci!

Répondre

9

Vous pouvez utiliser la méthode alias_attribute comme ceci:

class Account < ActiveRecord::Base 
    set_table_name "DXFTACCTS" 

    alias_attribute :first_name, :XORFNAME 
end 

alias_attribute crée les méthodes prenom, prenom = et prénom? qui va correspondre à la colonne XORFNAME dans votre tableau. Cependant, vous ne pourrez PAS l'utiliser dans des conditions comme les colonnes régulières. Par exemple:

Account.all(:conditions => { :first_name => "Foo" }) 

qui va échouer ...

2

Je pense que quelque chose comme la définition des méthodes de lecture et de définition devrait faire l'affaire:

class Account < ActiveRecord::Base  

    ... 

    def firts_name 
    self[:XORFNAME] 
    end 

    def first_name= value 
    self[:XORFNAME] = value 
    end 

    ... 

end 
+0

C'est ce que je craignais :-( – alexeypro

+0

DanneManne ci-dessous proposé un court et une meilleure façon que je ne connaissais pas avant. – Antiarchitect

Questions connexes