Можно ли получить доступ к родительскому классу (вместо подклассов) при использовании наследования одной таблицы?

У меня есть класс Post с подклассами TextPost, ImagePost и LinkPost (с использованием STI). Эти типы сообщений указаны в виде строк в Post.type (согласно соглашению STI).

Я могу нормально звонить TextPost.all, ImagePost.all и LinkPost.all.

Я думал, что смогу позвонить Post.all, но получаю следующую ошибку:

ActiveRecord::SubclassNotFound: The single-table inheritance mechanism failed to locate the subclass: 'text'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite Post.inheritance_column to use another column for that information.

Для справки, вот соответствующая часть моего schema.rb:

create_table "posts", :force => true do |t|
  t.string   "title"
  t.string   "type"
  t.integer  "author_id"
  t.datetime "publish_datetime"
  ...
end

И мои подклассы (каждый в своем собственном файле .rb с соответствующим именем):

class TextPost < Post
  ...
end

class ImagePost < Post
  ...
end

class LinkPost < Post
  ...
end

Я делаю что-то не так? Или просто невозможно (просто и лаконично) вызвать родительский класс при использовании STI?


person jasonmklug    schedule 28.04.2012    source источник


Ответы (1)


Похоже, у вас есть строка в вашей базе данных со столбцом типа, равным «тексту». Rails пытается преобразовать это в класс text. Похоже, вам нужно TextPost в столбце типа, а не text.

person mguymon    schedule 28.04.2012
comment
Хороший звонок! Была запись, оставшаяся после моей первой попытки STI (неправильно помеченный класс в Post.type как «текст», а не «TextPost»). Спасибо за помощь. - person jasonmklug; 28.04.2012