2012-09-26 49 views
-1

我遇到與此代碼的ActiveRecord 3.2.8奇怪的錯誤:Activerecord 3.2.8關聯錯誤

我有2個模型 - 客戶和發票。

class Customer < ActiveRecord::Base 
    has_many :invoices 
end 

class Invoice < ActiveRecord::Base 
    belongs_to :customer 

    def self.last(customer) 
    customer.invoices.order("some_date_column DESC").first 
    end 
end 

我運行一個類似的代碼:

Thread.new do 
    ActiveRecord::Base.connection_pool.with_connection do 
    Customer.all.each do |customer| 
     invoice = Invoice.last(customer) 
     ... 
    end 
    end 
end 

當運行代碼我有時會收到如下奇怪的錯誤:

/var/lib/gems/1.8/gems/activerecord-3.2.8/lib/active_record/associations/collection_association.rb:25:in 'initialize': wrong number of arguments (1 for 0) (ArgumentError) 
from /var/lib/gems/1.8/gems/activerecord-3.2.8/lib/active_record/associations/collection_association.rb:25:in 'new' 
from /var/lib/gems/1.8/gems/activerecord-3.2.8/lib/active_record/associations/collection_association.rb:25:in 'initialize' 
from /var/lib/gems/1.8/gems/activerecord-3.2.8/lib/active_record/associations.rb:157:in 'new' 
from /var/lib/gems/1.8/gems/activerecord-3.2.8/lib/active_record/associations.rb:157:in 'association' 
from /var/lib/gems/1.8/gems/activerecord-3.2.8/lib/active_record/associations/builder/association.rb:44:in 'invoices' 
from .../models/invoice.rb:7:in 'last' 

任何幫助深表感謝。

回答

1

當你得到這樣的錯誤

wrong number of arguments (X for Y) 

的這意味着你試圖調用傳遞不同數量的參數比預期的方法。在你的情況下,你調用的方法不應該接收任何參數(for 0),但你試圖通過一個(1 for)。從錯誤的最後一行看來,問題似乎是Invoice.last(customer)

+0

謝謝,但您可以在方法定義中看到,Invoice.last方法應該只接受1個參數。調用new方法時,第25行的ActiveRecords的collection_association.rb文件中引發了ArgumentError。 – Igi