我有一个Post类,包含TextPost,ImagePost和LinkPost子类(使用STI)。这些Post类型在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时,(简单地,简洁地)调用父类是不可能的?
答案 0 :(得分:1)
听起来你的数据库中有一行,类型列等于“text”。 Rails试图将STI转换为text
类。您希望在类型列中看到的是TextPost
,而不是text
。