J'ai une classe nommée J'ai une classe nommée et j'ai une classe nommée in post code>: question code> qui hériter de post Code>: p> réponse code> qui héritent également de "post": p> POST code>, j'ai une colonne nommée post_type_id code> et son "type est integer code>.
Comment utiliser le nom et le type de colonne STI et spécifiques à hériter à partir de POST? 0 code> signifie question code> et 1 code> signifie réponse code>. (0 & 1 est la valeur de post_type_id code> dans la table des messages) p> p>
4 Réponses :
Vous pouvez modifier le nom de la colonne d'héritage de table unique, comme: Cependant, il n'y a aucun moyen de provoquer des rails d'utiliser des entiers au lieu de stocker le type réel en tant que chaîne, Ce qui me fait penser que cela peut ne pas être un excellent cas d'utilisation pour un héritage cible unique. Peut-être qu'une portée vous conviendrait mieux à la place: P> class Post < ActiveRecord::Base
scope :questions, where(:post_type_id => 0)
scope :answers, where(:post_type_id => 1)
end
@questions = Post.questions.all
@answers = Post.answers.all
Il y a en fait un moyen, comme pour toutes choses. Vous pouvez remplacer le Méthode de recherche_sti_class pour rechercher votre type en fonction d'un entier. P>
Cela pourrait être ce que vous recherchez. P>
http://lorefnon.me/2014/07/27/ optimiser-sti-colonnes.html p>
EDIT: URL mise à jour (merci @subhashchandran) p>
Vous devrez définir votre type de colonne à l'aide de Self.Heritance_Column Ensuite, vous devrez fournir votre propre comportement à la méthode suivante: "sti_class_for (type_name)" qui est situé dans ce fichier "aciverecord / lib / active_record / héritage.rb" p>
Donc, vous devrez avoir à singe patch le fichier ci-dessus. p>
Ce n'est pas la solution recommandée, vous devrez faire une migration et modifier toutes les valeurs pour correspondre à votre nom de classe. P>
Stackoverflow.com/questions/7134559/... < / a>