如何自定义Rails 3 STI列名

VvD*_*PzZ 12 ruby-on-rails

我有一个名为的班级Post:

class Post < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)

我有一个名为Question继承自的类Post:

class Question < Post
end
Run Code Online (Sandbox Code Playgroud)

我有一个名为Answer继承自'Post'的类:

class Answer < Post
end
Run Code Online (Sandbox Code Playgroud)

Post,我有一个名为列的列post_type_id,其类型是Integer.
如何使用STI和特定列名称和类型从Post继承?0手段Question1手段Answer.(0和1是post_type_id帖子表中的值)

Ver*_*cus 24

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

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

end
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)


Fin*_*arr 9

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