Skip to content

Instantly share code, notes, and snippets.

@aristotelesbr
Last active August 29, 2015 14:28
Show Gist options
  • Save aristotelesbr/74e5437ba2e6b5090669 to your computer and use it in GitHub Desktop.
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
@aristotelesbr
Copy link
Author

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

@josecoelho
Copy link

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.

@aristotelesbr
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment