Rails:无效的单表继承类型错误

时间:2013-08-14 22:27:16

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

所以,我正在使用现有的数据库迁移这个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 
)

如果我评论出类型,一切正常。但是键入它错误。

2 个答案:

答案 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

它读取;

  1. 执行$&gt; rails生成迁移ChangeColumnName 其中,ChangeColumnName是我们迁移的名称。这可以是任何名称。
  2. 现在,在db / migrate / _change_column_name.rb编辑生成的迁移文件

    class ChangeColumnName < ActiveRecord::Migration
    def change
    rename_column :table_name, :old_column, :new_column
    end
    end
    
  3. $&GT; rake db:migrate

  4. 您必须编辑控制器和查看文件,例如如果型号名称是Product,那么您可能会编辑这些文件

    1. /app/views/products/_form.html.erb
    2. /app/views/products/show.html.erb
    3. /app/controllers/products_controller.erb
    4. /app/views/products/index.html.erb