2011-02-01 4 views
4

Думаю, мне нужно использовать STI в Rails.Рельсы STI и настройка строки «type»

Вот мой класс:

class Person < ActiveRecord::Base 
end 

class Landlord < Person 
end 

и таблица людей имеет :type столбец, это строка.

Итак, что я ожидаю увидеть в таблице, заключается в том, что каждая строка, которая является Лицом, имеет тип, заданный как «Лицо», и каждый Арендодатель имеет тип, заданный «Арендодатель». Однако это не то, что я вижу. Каждый Арендодатель имеет тип, установленный на «Арендодатель», но у каждого Лица свой тип, равный нулю. Очень хорошо, что рельсы работают, но я просто искал подтверждения.

ответ

11

Это, действительно, как работает ИППП. Базовый класс имеет тип NULL в базе данных (или nil в ruby).

+0

спасибо. – TheDelChop

+1

Почему это работает так? – ioquatix

+2

@ioquatix, потому что, как говорится в ответе, тип базового класса имеет значение null. Как правило, у вас должно быть «class Person» с подклассами «Арендатор» и «Landlord». Родительский класс должен содержать методы/проверки, применимые к нему и его подклассам. Пока Rails просматривает имя подкласса и отмечает его как тип. – onebree

5

Вы можете решить это, если вы хотите, добавив type столбец со значением по умолчанию "Person".

Смежные вопросы