En ce moment j'ai un initialiseur qui fait cela:Comment ajouter une association has_many sur tous les modèles
ActiveRecord::Base.send :has_many, :notes, :as => :notable
ActiveRecord::Base.send :accepts_nested_attributes_for, :notes
Il construit l'association très bien, sauf quand je charge une vue qui l'utilise, la deuxième charge me donne: can't dup NilClass
de:
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2184:in `dup'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2184:in `scoped_methods'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2188:in `current_scoped_methods'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2171:in `scoped?'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2439:in `send'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2439:in `initialize'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/reflection.rb:162:in `new'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/reflection.rb:162:in `build_association'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_collection.rb:423:in `build_record'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_collection.rb:102:in `build'
(my app)/controllers/manifests_controller.rb:21:in `show'
Toutes les idées? Est-ce que je fais cela dans le mauvais sens? Fait intéressant, si je déplace l'association sur le modèle avec lequel je travaille en ce moment, je n'obtiens pas cette erreur. Je pense que je dois construire incorrectement l'association globale.
Y at-il raison vous ne spécifiez pas cette association directement dans vos modèles? –
J'ai beaucoup, beaucoup de modèles, et je veux qu'ils aient tous des notes. Le principe DRY dit de mettre cela dans la classe dont ils héritent tous. – joshsz
BTW, j'ai fait quelques recherches supplémentaires et constaté que le problème existe seulement dans le développement, où Rails recharge des classes à chaque demande. Il semble que Rails ne recharge pas ActiveRecord :: Base, quand dans ce cas je le veux. – joshsz