使用单表继承时是否可以访问父类(而不是子类)?

时间:2012-04-28 02:01:39

标签: ruby-on-rails-3 sti

我有一个Post类,包含TextPost,ImagePost和LinkPost子类(使用STI)。这些Post类型在Post.type中指定为字符串(根据STI约定)。

我可以致电TextPost.allImagePost.allLinkPost.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时,(简单地,简洁地)调用父类是不可能的?

1 个答案:

答案 0 :(得分:1)

听起来你的数据库中有一行,类型列等于“text”。 Rails试图将STI转换为text类。您希望在类型列中看到的是TextPost,而不是text