如何自定义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
表示Question
, 1
表示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方法以根据整数查找类型。