Как настроить имя столбца STI Rails 3
У меня есть класс с именем Post
:
class Post < ActiveRecord::Base
end
У меня есть класс с именем Question
, который наследует от Post
:
class Question < Post
end
и у меня есть класс с именем Answer
, который также наследуется от "Post":
class Answer < Post
end
В Post
у меня есть столбец с именем post_type_id
, а его тип - Integer
.
Как использовать STI и определенное имя столбца и тип для наследования от Post? 0
означает Question
и 1
означает Answer
. (0 и 1 - значение post_type_id
в таблице сообщений)
Ответы
Ответ 1
Вы можете изменить имя столбца наследования одной таблицы следующим образом:
class Post < ActiveRecord::Base
self.inheritance_column = 'type_column_name'
end
Однако нет способа заставить 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
Ответ 2
На самом деле есть способ, как и все. Вы можете переопределить метод find_sti_class, чтобы искать свой тип на основе целого числа.
Ответ 3
Это может быть то, что вы ищете.
http://lorefnon.me/2014/07/27/optimizing-sti-columns.html
EDIT: Обновлен URL (спасибо @SubhashChandran)