je le scénario suivantImplémenter STI où la classe parente n'a pas de contrôleur propre est juste un modèle et a une relation avec d'autres modèles. Rails STI
class XYZ < ActiveRecord::Base
has_many :abcs
end
class ABC < ActiveRecord::Base
belongs_to :xyz
end
class A < ABC
end
class B < ABC
end
class C < ABC
end
Le modèle ABC n'a pas de contrôleur, ou la vue. Les données relatives à ABC seront insérées à partir des vues et des contrôleurs XYZ. L'utilisateur définit une valeur de type pour ABC qui peut être A, B ou C.
Et selon le type, la sous-classe STI correspondante doit être instanciée et les données doivent être enregistrées de manière appropriée. Mais ici les sous-classes ne sont pas instanciées, les données sont parfaitement sauvegardées. Mais je le fais de la mauvaise façon car j'ai écrit le code des sous-classes dans la classe STI parent parce que ce code n'était pas appelé dans la sous-classe.
Veuillez donner des suggestions et fournir des solutions ou des tutoriels.
Merci d'avance.
Je ne peux pas extraire ce que vous voulez, mais accepte probablement_attributs_pour_effectue ce que vous voulez? – Reactormonk
J'espère que cela vous aidera à mieux comprendre. Considérez un CMS qui pourrait avoir Page, NewsItem, BlogItem etc. Ils pourraient chacun descendre d'une classe commune qui à son tour hérite d'ActiveRecord. La table pour chacun serait la même (title, body, tags, published_at) mais chaque modèle pourrait avoir des associations différentes, ou des statuts différents, ou un flux de travail différent donc chacun a du code personnalisé dans sa propre classe. Pourtant, ils partagent tous une table commune et la classe parente. Cela me permet également d'utiliser la classe parente pour faire une recherche de classe croisée et de faire en sorte que le tableau résultant des enregistrements tape automatiquement. – Rohit
J'ai ajouté le code personnalisé dans les classes enfants, mais je ne suis pas en mesure de trouver un moyen d'instancier la classe enfant afin d'exécuter le code à l'intérieur. En utilisant le mécanisme accepts_nested_attributes_for, vous acceptez les attributs de la classe parente, mais vous ne pouvez pas séparer les classes enfants. Et c'est mon problème. J'espère que vous avez une idée plus claire de mon problème maintenant. :) – Rohit