référencement belongs_to association d'une association de belongs_to
-
30-09-2019 - |
Question
J'ai les relations suivantes que le travail dans la console de rails, mais pas quand je lance le site ce que je fais mal?
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é externe vers B et B a une clé étrangère à A.
Cela fonctionne dans les rails console.
c = C.find(12)
c.b.title
Mais il ne fonctionne pas lorsque je lance le site.
Voici l'erreur que je reçois
NoMethodError (undefined method `title' for #<ActiveRecord::Associations::BelongsToAssociation:0x104feb5a0>):
La solution 3
Je devais tourner la méthode de titre de classe B dans une méthode de classe pour l'obtenir au travail.
Autres conseils
Au lieu de définir une méthode pour ce faire, delegate
! En app/models/c.rb
:
delegate :title, :to => :b
Et puis en app/models/b.rb
:
delegate :title, :to => :a
has_one (association_id, options = {}) Indique un-à-un association avec une autre classe. Cette méthode devrait être utilisé que si l'autre classe contient la clé étrangère. Si la classe actuelle contient l'étranger clé, alors vous devriez utiliser belongs_to au lieu. Voir également ActiveRecord :: Associations :: classmethods de vue d'ensemble quand utiliser has_one et quand utiliser belongs_to.