无效的单 table 继承类型:尝试在 Rails 中设置 STI 子类时出错 4

Invalid single-table inheritance type: Error when TRYING to set a STI subclass in Rails 4

这是我第一次使用单一 table 继承。我正在尝试使用填充有辅助方法的 select 菜单为博客 Post 设置子类。我在创建 Post 记录时一直遇到同样的错误。

There is an Error: Invalid single-table inheritance type: News is not a subclass of Post

这是我的模型

post.erb

class Post < ActiveRecord::Base
  scope :event, -> { where(type: 'Event') } 
  scope :news, -> { where(type: 'News') } 
end

新闻_post.erb

class News < Post
end

事件_post.erb

class Event < Post
end

post_helpers.erb

 def post_types
     [
      ['News'],
      ['Event'],
    ]
 end

_form.erb

= simple_form_for @post do |f| 
  = f.select(:type, post_types { },  {},  { multiple: false , class: " default_select form-control "  })
#rest of the form redacted

我是否缺少定义子类的内容?再次...第一次这样做...

更新: 是的,table 架构中有一个 post.type 列。它是一个字符串。

您需要将 type 列添加到 posts table,默认情况下不添加

--------更新------------

原因可能是News模型是复数,试着告诉railsnews是uncountable名词。

添加到config/initializers/inflections.rb

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable %w( news )
end

您必须重新定义您的 post_type 方法。

最好使用常量

 TYPES = %w( News, Event )