2010-12-10 33 views
2

J'ai une classe de modèle:Rails convention de nommage pour les noms Majuscules

class QRCode < ActiveRecord::Base 

    has_many :properties 

end 

Ainsi rails a besoin d'une table de base de données nommée 'qr_codes' et une clé étrangère appelée 'qr_code_id'. Mais comme une relation dans mon modèle de la propriété dont il a besoin un autre nom:

class Property < ActiveRecord::Base 

    belongs_to :q_r_code 

end 

Donc, si je veux créer un objet de propriété Je dois dire « : q_r_code => QRCode » Mais active_record veut une propriété qr_code, parce que la colonne est appelée 'qr_code_id'

Est-ce que je comprends quelque chose de mal ou est-ce que ce type de nom est impossible à mapper pour Rails?

P.S .: J'utilise Rails 3.0.3

+0

Je renommerais ma classe 'QrCode'. En d'autres termes, j'utilise le cas de chameau pour représenter les limites de mots, plutôt que la notion de si oui ou non le terme original est un acronyme ou non. – aceofspades

+0

C'est l'une des choses qui m'énerve à propos de l'utilisation de Rails avec des bases de données existantes. Les noms de champs proviennent souvent de left-field car le créateur d'origine de la base de données ou de la table n'a pas arrêté de penser à utiliser un langage pour accéder à la table autre que SQL et la console. Considérer un ORM avec ses règles et ses hypothèses était complètement hors de leur portée. Comme le souligne @Simone Carletti, Rails nous permet de remplacer ses suppositions par les noms réels des clés ou des tables, mais nous pouvons toujours nous retrouver avec des modèles et des champs maladroits, ce qui conduit à des malédictions lorsque nous découvrons les problèmes. –

+1

Merci, enfin, j'ai renommé ma classe en QrCode, car je peux éviter cette personnalisation des relations et des routes – LeonS

Répondre

5

belong_to accepte un attribut :foreign_key et :class_name.

+0

c'est tout, merci. – LeonS