如何为种子数据中的模型选择包含性选择选项?

时间:2014-01-12 05:54:16

标签: ruby-on-rails ruby-on-rails-4

我有一个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

这里发生了什么?有什么方法可以做到这一点,为什么它认为它是一个子类?

3 个答案:

答案 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_columntype列添加不同的名称。

这里给出了另一个可能的解决方案:Rails: Invalid single-table inheritance type error,虽然我个人并不知道这样做的含义。