2015-11-04 41 views
0

在我的rails應用程序中,我基本上有一個「帳戶」和「交易」模型。 「交易」模式belongs_to「賬戶」模式兩次,一次爲credited_account,一次爲debited_account。它看起來像這樣:「Type Error:class or module required」for two-to-many relationship

class Account < ActiveRecord::Base 
    has_many :credits, :class_name => "Transaction", :foreign_key => 'credited_account_id' 
    has_many :debits, :class_name => "Transaction", :foreign_key => 'debited_account_id' 
# ... validators and such ... # 
end 

class Transaction < ActiveRecord::Base 
    belongs_to :credited_account, :class => "Account" 
    belongs_to :debited_account, :class => "Account" 
end 

這一切工作,但我遇到了一些與我的規格問題。

使用RSpec和Factory_Girl,每次運行一個需要交易工廠的規格時,我都會得到一個TypeError。 Rspec的輸出如下:下面

Failure/Error: transaction = build(:transaction) 
TypeError: 
    class or module required 

是我的規格/ factories.rb

FactoryGirl.define do 
    factory :account do 
    #... account factory ...# 
    end 

    factory :transaction do 
    association :credited_account, factory: :account 
    #... other attributes set here ...# 
    association :debited_account, factory: :account 
    end 
end 

任何瞭解是非常感謝!

問候

回答

1

你應該改變

class Transaction < ActiveRecord::Base 
    belongs_to :credited_account, :class => "Account" 
    belongs_to :debited_account, :class => "Account" 
end 

class Transaction < ActiveRecord::Base 
    belongs_to :credited_account, :class_name => "Account" 
    belongs_to :debited_account, :class_name => "Account" 
end 
+0

好極了!這似乎工作!但現在真正的問題......爲什麼?更重要的是,爲什麼:類在運行應用程序時工作,但不用於測試? –

+0

@JoshuaFreivald'class'和'class_name'是兩個不同的東西。 'class_name'用於定義該關聯的類名,以告訴Rails尋找那個有趣的類名 – Pavan

+0

。絕對是我要做更多的閱讀。再次感謝你的幫助! –

相關問題