2013-01-20 108 views
0
def self.build_prior_month(payee, as_of = Time.current, opts = {})  
    start_date, end_date, year, month = effective_dates(as_of) 

    statement = payee.earnings_statements.build(
     :year => year, 
     :month => month, 
     :balance => 0, 
     :revenue => 0 
    ) 

    statement.generate(start_date, end_date, year, month) 
    statement.update_totals 

    statement 
    end 

这是我在模型中的一个函数。它正确返回statement,但不保存到数据库。这是为什么?为什么我的Rails模型不能保存到数据库中?

generate功能看起来像:

def generate_ledger_items(start_date, end_date, year, month) 
    payee.ledger_entries.for_month_and_year(month, year).each do |entry| 
     earnings_statement_items.build(
     :items => entry.item_group, 
     :units => entry.units, 
     :net_revenue => entry.net_revenue, 
     :net_revenue_per_unit => [entry.net_revenue, entry.units].all? ? (entry.net_revenue/entry.units).round(2) : nil, 
     :fees => entry.service_fees, 
     :payments_collected => entry.spendings, 
     :fee_terms => entry.terms || entry.description, # When would terms be set? 
     :due => entry.credit || -entry.debit 
    ) 
    end 
    end 

    def update_totals 
    self.revenue = earnings_statement_items.net_revenue 
    self.balance = earnings_statement_items.total 
    end 
+1

因为你永远不会把它保存在数据库中。除非你在update_totals中做到这一点? 'build'只是创建对象,它不会将它保存到数据库中。 update_totals的来源是什么? –

+0

增加'update_totals' – Shamoon

回答

1

上的连结,build方法实际上并没有保存记录到数据库中。 create将。它类似于您的车型上newcreate之间的差异。

statement = payee.earnings_statements.create(
    :year => year, 
    :month => month, 
    :balance => 0, 
    :revenue => 0 
) 

将保存您的记录。请参阅documentation

+0

我可以使用'statement.save!'吗? – Shamoon

+0

是的,这也会起作用。 –

1

.build不保存对象

电话:

statement.save 
相关问题