如何自定义Rails 3 STI列名

我有一个名为Post的课程:

 class Post < ActiveRecord::Base end 

我有一个名为Question的类inheritance自Post

 class Question < Post end 

我有一个名为Answer的类,它也inheritance自’Post’:

 class Answer < Post end 

Post ,我有一个名为post_type_id的列,其类型为Integer
如何使用STI和特定列名称和类型从Postinheritance? 0表示Question1表示Answer 。 (0和1是posts表中post_type_id的值)

您可以更改单表inheritance列的名称,如下所示:

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

但是,没有办法使Rails使用整数而不是将实际类型存储为字符串,这使我认为这可能不是单个目标inheritance的一个很好的用例。 也许范围更适合您:

 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 

实际上有一种方式,就像所有事情一样。 您可以覆盖find_sti_class方法以根据整数查找类型。

这可能是你正在寻找的。

http://lorefnon.me/2014/07/27/optimizing-sti-columns.html

编辑:更新的URL(感谢@SubhashChandran)