2013-11-14 44 views
0

我敢肯定,這是什麼毛病我的課,但在這裏它是:Ruby的子類錯誤

class Transaction < ActiveRecord::Base 
     attr_accessible :transaction_date, :amount, :other_info, :type, :purchase 
end 

require 'csv' 
require_relative '../../app/models/transaction' 
csv_text = File.read('monthly_csvs/pcbanking.csv') 
csv = CSV.parse(csv_text, :headers => false) 
csv.each do |row| 
    puts row[3].to_s 
    Transaction.create!(transaction_date: row[0], amount: row[1], other_info: row[2], type: row[3], purchase: row[4]) 
end 

錯誤:

POS Purchase 
rake aborted! 
Invalid single-table inheritance type: POS Purchase is not a subclass of Transaction 

波什購買的是行[3]元素,是一個字符串。

回答

1

Rails(或更具體的ActiveRecord)在模型中默認使用type列來實現Single Table Inheritance(STI)。這是一種實現保存在同一個數據庫表中的多個繼承模型的技術。

當您在模型中使用type列時,Rails預計它將用於STI。你可以現在你type列要麼重命名爲其他或指示的Rails在您的模型類使用該使用另一列作爲STI類型列(本例中爲sti_type列):

class Transaction < ActiveRecord::Base 
    self.inheritance_column = :sti_type 
end