12
votes

Comment personnaliser les rails 3 Nom de la colonne STI

J'ai une classe nommée post : xxx

J'ai une classe nommée question qui hériter de post : xxx

et j'ai une classe nommée réponse qui héritent également de "post": xxx

in POST , j'ai une colonne nommée post_type_id et son "type est integer .
Comment utiliser le nom et le type de colonne STI et spécifiques à hériter à partir de POST? 0 signifie question et 1 signifie réponse . (0 & 1 est la valeur de post_type_id dans la table des messages)


4 Réponses :


25
votes

Vous pouvez modifier le nom de la colonne d'héritage de table unique, comme: XXX Pré>

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


0 commentaires


3
votes

Cela pourrait être ce que vous recherchez.

http://lorefnon.me/2014/07/27/ optimiser-sti-colonnes.html

EDIT: URL mise à jour (merci @subhashchandran)


0 commentaires

0
votes

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"

Donc, vous devrez avoir à singe patch le fichier ci-dessus.

Ce n'est pas la solution recommandée, vous devrez faire une migration et modifier toutes les valeurs pour correspondre à votre nom de classe.


0 commentaires