-
-
Save aristotelesbr/74e5437ba2e6b5090669 to your computer and use it in GitHub Desktop.
# Deve criar no banco de dados de um valor(despesa) parcelado, onde | |
# o valor de cada parcela será cobrado nos messes subsequentes. | |
def create_invoices | |
interval = 1.month | |
cicles = self.quantity | |
start_date = Date.today | |
current_date = start_date | |
cicles.times do | |
Expense.create!(value: "#{value}", quantity:"#{quantity}", | |
descripition: "#{description}", user_id: "#{user_id}") | |
portions = self.value / self.quantity | |
puts current_date | |
puts portions | |
current_date += interval | |
end | |
end |
Sem grilo. Estamos aqui para aprender e evoluir. 👍
Ainda está obscuro pra mim cara.
SystemStackError: stack level too deep
normalmente é resultado de uma referência cíclica. Exemplificando
def uma_funcao
outra_funcao
end
def outra_funcao
uma_funcao
end
Ou seja, é uma chamada de função que nunca acaba, tipo um loop infinito que estoura o limite de chamadas de função.
No Rails, já fiz isso acontecer algumas vezes com o uso de callbacks (EX: after_create
, after_save
). Por exemplo, após criar um Expense, tento atualizar um valor em Income, porém após atualizar um Income eu tento criar Expenses
Poderia colar os modelos Expense e Income para tentarmos identificar o problema?
O legal é entender como e quando a função create_invoices
é chamada.
Opa, desculpe a demora em postar ai esta, fiz exatamente um after_create
. Deu uma arrumada e esta funcionando sem aquele loop infinito, agora tudo que eu preciso é da um insert no banco com o valor das parcelas no outros messes.
class Expense < ActiveRecord::Base
after_create :create_invoices
protected
after_create :create_invoices
protected
def create_invoices
if quantity.present?
interval = 1.month
cicles = self.quantity
start_date = Date.today
current_date = start_date
portions = self.value / self.quantity
cicles.times do
self.update(value: portions) # Da um update no valor total
# Preciso criar uma parcela em cada mês.
# Ex. Fogão => 100 / 5 = 20.0
# Jan. => Fogão: valor: 20.0"
# Fev. => Fogão: valor: 20.0
# Mar => ..... Valor: 20.0
#Abr => ........
puts current_date
puts portions
current_date += interval
end
end
end
O erro:
Ele gera isso um monte de vez:
(0.4ms) SELECT SUM("incomes"."salary") FROM "incomes" SQL (0.4ms) INSERT INTO "expenses" ("value", "quantity", "description", "user_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["value", 100.0], ["quantity", 5], ["description", "aaaa"], ["user_id", 1], ["created_at", "2015-08-27 02:36:20.530255"], ["updated_at", "2015-08-27 02:36:20.530255"]] (0.4ms) ROLLBACK
E ao fim da esse erro:
SystemStackError: stack level too deep form /home/ruby/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/arel-6.0.2/lib/arel/visitors/to_sql.rb:240:in
each_with_index'`Corrigi a forma de passar as variáveis, ainda estou iniciando... rsrs