2012-09-26 3 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 аргумент. АргументError был поднят в файле collection_association.rb ActiveRecords в строке 25 при вызове метода new. – Igi

Смежные вопросы