Как настроить имя столбца Rails 3 STI - PullRequest
11 голосов
/ 26 февраля 2012

У меня есть класс с именем 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 в таблице сообщений)

Ответы [ 3 ]

23 голосов
/ 26 февраля 2012

Вы можете изменить имя столбца наследования одной таблицы следующим образом:

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
9 голосов
/ 31 октября 2012

Там на самом деле есть способ, как и со всеми вещами. Вы можете переопределить метод find_sti_class для поиска вашего типа на основе целого числа.

3 голосов
/ 30 сентября 2014

Это может быть то, что вы ищете.

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

РЕДАКТИРОВАТЬ: обновленный URL (спасибо @SubhashChandran)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...