2012-02-26 15 views
11

ho una classe denominata Post:come personalizzare Rails 3 STI nome della colonna

class Post < ActiveRecord::Base 
end 

ho una classe denominata Question che eredita da Post:

class Question < Post 
end 

e ho una classe denominata Answer che eredita anche da "Posta":

class Answer < Post 
end 

In Post, ho una colonna denominata post_type_id e il suo 'tipo è Integer.
Come utilizzare STI e il nome di colonna specifica & per ereditare da Post? 0 significa Question e 1 significa Answer. (0 & 1 è il valore di post_type_id nella tabella messaggi)

+0

http://stackoverflow.com/questions/7134559/rails-use-type-column-without-sti – apneadiving

risposta

21

È possibile modificare il nome della colonna singola ereditarietà delle tabelle in questo modo:

class Post < ActiveRecord::Base 
    self.inheritance_column = 'type_column_name' 

end 

Tuttavia, non v'è alcun modo per causare Rails per usare numeri interi invece di memorizzare il tipo effettivo come una stringa, il che mi fa pensare che questo potrebbe non essere un ottimo caso d'uso per l'ereditarietà del target singolo. Forse un telescopio ti si addice meglio:

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 
8

Esiste davvero un modo, come con tutte le cose. È possibile ignorare il metodo find_sti_class per cercare il tipo in base a un numero intero.

Problemi correlati