我有一个Dog
模型可以有很多tags
,而我的Tag
模型有type
列。对于type
属性,我只能选择3种不同的类型:
class Tag
belongs_to :dog
TYPES = %w(Red Blue Green)
validates :type, inclusion: { :in => TYPES },
presence: true
end
在我的种子文件中,我有:
tags = Tag.create( [ { name: "Red Terrier", type: "Red" } ] )
我运行rake命令并得到错误:
rake aborted!
Invalid single-table inheritance type: Red is not a subclass of Tag
这里发生了什么?有什么方法可以做到这一点,为什么它认为它是一个子类?
答案 0 :(得分:2)
不要使用'type'作为列名。它保留在Rails中。重命名它会起作用
答案 1 :(得分:1)
type
是rails用于多态模型的保留列名。尝试将您的type
列重命名为dog_type
,它应该可以正常工作
请参阅:http://guides.rubyonrails.org/active_record_basics.html#schema-conventions
答案 2 :(得分:1)
由于Rails幕后发生的事情,你遇到了一个bug。基本上type
是一个用于ActiveRecord
继承的字段,因此有一个名为type
的字段会搞砸了
一种可能的解决方案:创建新迁移,然后使用rename_column
为type
列添加不同的名称。
这里给出了另一个可能的解决方案:Rails: Invalid single-table inheritance type error,虽然我个人并不知道这样做的含义。