0

Les relations polymorphes ne fonctionnent pas lorsque les modèles ont un espace de noms dans les rails 3.1. Voici un exemple:Les modèles avec espace de noms ne fonctionnent pas avec le polymorphisme et j'ai besoin d'une solution de contournement

class Accounting::Request::Check < ActiveRecord::Base 
    has_one :accounting_request, as: :requestable 
end 

class Accounting::Request < ActiveRecord::Base 
    belongs_to :requestable, polymorphic: true 
end 


cr = Accounting::Request::Check.create!() 
cr.create_accounting_request 

Résultats dans:

NameError: uninitialized constant Accounting::Request::Check::AccountingRequest 

Ma question est, comment puis-je travailler autour de cela pour le moment avant de migrer aux rails 5?

One solution J'ai trouvé que c'était d'ajouter class_name: ':: ClassName' mais cela ne fonctionne pas pour moi.

Répondre

0

Oui, rails supporte polymorphisme sur les modèles ... namespaced

Voici le code révisé qui le fait fonctionner:

class Accounting::Request < ActiveRecord::Base 
    belongs_to :requestable, polymorphic: true 
end 

class Accounting::CheckRequest < ActiveRecord::Base 
    has_one :accounting_request, as: :requestable, class_name: 'Accounting::Request' 
end 

class_name a besoin d'être sur le modèle 'able', et doit spécifier complètement la classe qui contient belongs_to.

Aussi pas que j'utilise has_one ici au lieu de has_many.