2010-12-03 8 views
1

J'ai les relations suivantes qui fonctionnent dans la console rails mais pas quand je cours sur le site ce que je fais mal?référencement appartient à l'association d'une association belongs_to

class C < ActiveRecord::Base 
    belongs_to :b 
end 

class B < ActiveRecord::Base 
    belongs_to :a 
    has_many :c 

    def title 
    a.title 
    end 
end 

Tableau C a une clé étrangère à B et B a une clé étrangère à A.

Cela fonctionne dans la console de rails.

c = C.find(12) 
c.b.title 

Mais cela ne fonctionne pas lorsque j'exécute le site.

Voici l'erreur que je reçois

NoMethodError (undefined method `title' for #<ActiveRecord::Associations::BelongsToAssociation:0x104feb5a0>): 
+0

Recevez-vous des messages d'erreur lorsque vous l'utilisez sur le site? –

+0

Avez-vous juste tapé le symbole 'a'? Cela devrait être ': a' pas' a: ' – Alex

+0

J'ai corrigé le a: typo et ajouté l'erreur réelle que je reçois. – MHinton

Répondre

-1

je devais tourner la méthode de titre de classe B dans une méthode de classe pour le faire fonctionner.

+0

Bizarre ... une idée pourquoi? –

+0

Pouvez-vous montrer du code ..? –

0

has_one (association_id, options = {}) Indique un à une association avec une autre classe. Cette méthode ne doit être utilisée que si l'autre classe contient la clé étrangère. Si la classe actuelle contient la clé étrangère , vous devez alors utiliser belongs_to à la place. Voir aussi ActiveRecord :: Associations :: ClassMethods's vue d'ensemble sur l'utilisation de has_one et quand utiliser belongs_to.

+0

J'ai oublié d'ajouter l'association has_many dans ma question à l'origine. – MHinton

3

Plutôt que de définir une méthode pour ce faire, delegate! En app/models/c.rb:

delegate :title, :to => :b 

Et puis dans app/models/b.rb:

delegate :title, :to => :a 
Questions connexes