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>):
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top