2014-02-18 60 views
1

在我的訂單模型中,我有下面的回調。一切正常,直到最後一行,我嘗試更新1 invoice屬性並觸發發票模型中的after_update回調,但是當我使用.update()方法時,我收到錯誤數量的參數(0代表1)。.update in model - 參數數量錯誤(0表示1)

def update_invoice # self = order 
... 
    invoice = Invoice.find_or_create_by(job_id: job.id, start_string: start_string, end_string: end_string, client_id: client.id, start_date: start_date, end_date: end_date) 
    self.update_column(:invoice_id, invoice.id) 
    statement_start_date = start_date.beginning_of_month 
    statement_end_date = end_date.end_of_month 
    statement = Statement.find_or_create_by(start_date: statement_start_date, end_date: statement_end_date, client_id: client.id) 
    self.update_column(:statement_id, statement.id) 
    invoice.update(statement_id: statement.id) # wrong number of arguments (0 for 1) error 
end 

下面的作品作爲一個變通:

invoice.update_column(:statement_id, statement.id) 
invoice.save 

爲什麼第一種方法行不通像我預料到?謝謝!

回答

4

更新是一種類方法。這應該工作:

Invoice.update(invoice.id, :statement_id => statement.id) 

也可以使用update_attribute

invoice.update_attribute('statement_id', statement.id) 
+0

感謝更新時使用update_column因爲validationscallbacks將被跳過,這個工作。我在我的應用程序中使用了相同的語法(更新變量,而不是類),它的工作。任何想法爲什麼會是這樣? – avalente1

0

update方法僅適用於一流水平。

二者必選其一

invoice.update_attribute(:statement_id, statement_id) #validations will be skipped 

invoice.update_attribute(:statement_id => statement_id) 

不要使用update_column

相關問題