2010-09-14 14 views
1

Je suis en train la construction d'un simple projet à partir de zéro en utilisant Rails 3. En règle générale, les modèles sont comme:Dans Ruby on Rails, comment un modèle "has_many" et "belongs_to" peuvent-ils utiliser un autre champ que l'ID principal?

class Student < ActiveRecord::Base 
    has_many :awards 
end 

class Award < ActiveRecord::Base 
    belongs_to :student 
end 

et nous utilisons la award.id et student.id pour obtenir les enregistrements correspondants.

Mais s'il est

class Company < ActiveRecord::Base 
    has_many :stock_quotes 
end 


class StockQuote < ActiveRecord::Base 
    belong_to :company 
end 

Dans ce cas, nous pouvons utiliser le symbole de la société, comme MSFT ou GOOG pour identifier l'entreprise, au lieu d'utiliser la company.id. Par exemple, dans stock_quotes, nous pouvons stocker directement le symbole de la société au lieu d'utiliser company.id. Dans ce cas, existe-t-il un moyen de le spécifier dans les modèles?

Répondre

1

En plus de réponse « Slawosz, this question sur les clés primaires non-entier est également pertinent à votre question. À mon humble avis, il serait plus facile d'utiliser simplement des ID entiers comme dans l'exemple de Award et Student.

1

Slawosz a la bonne réponse. Pour être bavard (et pour la prochaine fois que je recherche ceci), il devrait être comme ceci:

#company 
has_many :stock_quotes, :primary_key => :symbol 

#stock_quote 
belongs_to :company, :foreign_key => :symbol 
+0

êtes-vous sûr? Il semble que les deux doivent être ': primary_key =>: symbole,: foreign_key =>: symbole' –

+1

Je ne suis pas totalement sûr (c'est définitivement non testé) mais ça fonctionne de la même façon que si StockQuote avait une colonne : company_id. Rails ramasser automatiquement sur la clé étrangère (company_id) à la société, puis utiliser le PK: id pour faire la jointure. Ceci est en train de se chevaucher. Si quelque chose, je peux les avoir inversés. – brycemcd