2013-08-14 7 views
16

したがって、私はこのPHPサイトを既存のデータベースで移行しており、これをRailsに変更することはできません。テーブル:Quotesの列がtypeとなっています。私がしようとすると、このモデルを作成し、タイプを設定するたびに、それは私に次のエラーを伝えます:Rails:無効な単一テーブルの継承タイプのエラー

ActiveRecord::SubclassNotFound (Invalid single-table inheritance type: HOME is not a subclass of Quotes)

それがになっていないので、それはその継承を考えて、なぜ私は理解していません。私の作成方法は次のようになります:

quote = Quotes.create(
    agent_id: agent.id, 
    client_id: client.id, 
    type: 'HOME', 
    status: 0, 
    date_created: DateTime.now 
) 

私がタイプをコメントアウトすると、すべて正常に動作します。しかし、それを入力するとエラーになります。

答えて

49

これを解決するには、inheritance_columnモデルをnilに設定します。 Active Recordのモデルはnilにinheritance_columnを設定し、属性:typeてテーブルから継承することができます属性はあなたがtype

class Quote < ActiveRecord::Base 
    self.inheritance_column = nil 
end 
+0

おかげで、これは正しい方向に私を指摘しました。私は "タイプ"と呼ばれる列を持っていた、それはエラーを引き起こしていた。 – mack

3

という名前のデータベース列を持つことができるようにすることを削除し、私は特にintialのコードで深い潜在的な落とし穴を持つ嫌いモデルの生成などのプロセス予約語を別のものに変更するだけで、後で必要が生じた場合に継承列を利用できるようになります。クリーナーソリューションはここにリストされています - >rename a database column name using migration

読み込みます。

  1. $> rails generate migration ChangeColumnName ここで、ChangeColumnNameはマイグレーションの名前です。これには任意の名前を使用できます。今
  2. 、デシベル/移行/ _change_column_name.rb

    class ChangeColumnName < ActiveRecord::Migration 
    def change 
    rename_column :table_name, :old_column, :new_column 
    end 
    end 
    
  3. $>すくいデシベルで発生した移行ファイルを編集します。移行

あなたは、例えば、コントローラとビューのファイルを編集する必要がありますモデル名は、製品であるならば、あなたはおそらく

  1. /app/views/products/_form.html.erb
  2. /app/views/products/show.html.erbこれらのファイルを編集します
  3. /アプリ/コントローラ/ products_controller.erb
  4. /app/views/products/index.html.erb
+0

私はそれがベストプラクティスであることに同意しますが、私の問題は、物事を変更する能力を持たないレガシーデータベースを使用することに関連していました。 –

関連する問題