HELP, Controlleurs et héritage ou association polymorphique

Salut,

Comment reproduire sur les controlleurs le comportement polymorphique
des modèles ? Bon dis comme ça c pas forcement clair. Alors reprenons
l’exemple de l’Agile Web D. with Rails :

Les classes Article, Sound, Image héritent de CatalogEntry grâce Ã
l’association polymorphique. Ces trois classes ont un attribut qui est
le contenu (content) avec des types différents.

class CatalogEntry < ActiveRecord::Base
belongs_to :resource, :polymorphic => true
end

class Article < ActiveRecord::Base
has_one :catalog_entry, :as => :resource
end

class Sound < ActiveRecord::Base
has_one :catalog_entry, :as => :resource
end

class Image < ActiveRecord::Base
has_one :catalog_entry, :as => :resource
end

Maintenant j’aimerais avoir un controlleur pour afficher le contenu de
ces modèles. J’imagine avoir un controlleur par classe. A priori je
compte afficher le catalogue et appeller la méthode d’affichage sur
l’élément du catalogue. Donc j’appelle la methode show_content du
controlleur CatalogEntryController qui lui devrait répercuter l’appel
sur la même méthode du controlleur fils.

class CatalogEntryController < ApplicationController
def show_content
Et là j’aimerais appeler la méthode show_content du controller “fils”.
C’est bête mais je ne sais pas comment faire.
end
end

class ArticleController < CatalogEntryController
def show_content
end
end

class SoundController < CatalogEntryController
def show_content
end
end

class ImageController < CatalogEntryController
def show_content
end
end

Comment appelle-t-on la méthode de la classe fille ? Pour appeller la
méthode de la classe parent c’est “super” mais comment ça marche dans
l’autre sens ??

Toute aide serait appréciée !
H

class CatalogEntryController < ApplicationController
def show_content
Et là j’aimerais appeler la méthode show_content du controller “fils”.
A ce moment là j’aimerais que Rails comprenne que je veux le controlleur
de l’élément fils de l’instance catalog_entry. Est-ce que je peux
échapper à une redirection explicite fonction du type du fils de
catalog_entry ?
end
end

Depuis la classe parente tu ne peux pas appeler les classes filles,
l’héritage c’est comme ça.
Il faut que tu te débrouille pour que ce soit la classe fille (donc le
controleur enfant) qui soit appelé

Sinon, met les methode show_content directement dans la classe mère
par exemple:
def show_article_content

end

Et si tu veux que cette methode soit accessible dans le controlleur des
articles sous le nom “show_content”, mets_y
def show_content
show_article_content
end
ou bien fait un alias

Mais bon c’est un peu superflu, autant appeler directement
show_article_content, elle est déjà dispo dans le controlleur
ArticlesController puisque héritée.

Harry S. a écrit :