所以,我正在使用现有的数据库迁移这个php站点,我无法将其转换为Rails。有一个表:Quotes
,其中包含一个名为type
的列。每当我尝试创建一个模型并设置类型时,它会告诉我以下错误:
ActiveRecord::SubclassNotFound (Invalid single-table inheritance type: HOME is not a subclass of Quotes)
我不明白为什么它认为它继承,因为它不应该。我的create方法如下所示:
quote = Quotes.create(
agent_id: agent.id,
client_id: client.id,
type: 'HOME',
status: 0,
date_created: DateTime.now
)
如果我评论出类型,一切正常。但是键入它错误。
答案 0 :(得分:50)
我通过将模型inheritance_column设置为nil来解决这个问题。 Active Record Models可以通过属性:type
从表继承,将inheritance_column设置为nil会删除该属性,从而允许您拥有一个名为type
的数据库列
class Quote < ActiveRecord::Base
self.inheritance_column = nil
end
答案 1 :(得分:3)
我讨厌在代码中有潜在的陷阱,特别是在生成模型这样的初始过程中。最好只是将保留字更改为其他内容并在以后需要时将自己释放以利用继承列。这里列出了一个更清洁的解决方案 - &gt; rename a database column name using migration
它读取;
现在,在db / migrate / _change_column_name.rb编辑生成的迁移文件
class ChangeColumnName < ActiveRecord::Migration
def change
rename_column :table_name, :old_column, :new_column
end
end
$&GT; rake db:migrate
您必须编辑控制器和查看文件,例如如果型号名称是Product,那么您可能会编辑这些文件