4
respostas

Como vários objetos a partir de um cadastro?

Depois do curso criei um novo projeto para venda de lotes de terreno. No meu projeto, uma venda pode ser parcelada em várias parcelas. Então tenho a classe Venda, a classe Parcelas e a classe Pagamento. Ao realizar uma venda e definir a quantidade de parcelas, quero gerar as devidas parcelas apertar o botão de cadastro de vendas. Criei o projeto via scaffold. Como proceder? Segue o esquema (schema.rb) do banco

ActiveRecord::Schema.define(version: 20170117161206) do

  create_table "contatos", force: :cascade do |t|
    t.string   "nome"
    t.string   "telefone"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer  "pessoa_id"
  end

  create_table "lotes", force: :cascade do |t|
    t.string   "referencia"
    t.decimal  "tamanho"
    t.text     "posicao"
    t.boolean  "situacao",      default: true
    t.decimal  "preco_a_vista"
    t.decimal  "preco_a_prazo"
    t.datetime "created_at",                   null: false
    t.datetime "updated_at",                   null: false
  end

  create_table "pagamentos", force: :cascade do |t|
    t.integer  "parcela_id"
    t.integer  "numero_parcela"
    t.decimal  "valor_parcela"
    t.decimal  "multa_paga"
    t.decimal  "juros_pago"
    t.decimal  "valor_total_pago"
    t.date     "data_pagamento"
    t.datetime "created_at",       null: false
    t.datetime "updated_at",       null: false
  end

  create_table "parcelas", force: :cascade do |t|
    t.integer  "venda_id"
    t.integer  "pagamento_id"
    t.integer  "numero_parcela"
    t.date     "data_vencimento"
    t.decimal  "multa"
    t.decimal  "juros"
    t.decimal  "valor_parcela"
    t.decimal  "valor_pago"
    t.boolean  "quitada"
    t.datetime "created_at",      null: false
    t.datetime "updated_at",      null: false
  end

  create_table "pessoas", force: :cascade do |t|
    t.string   "nome"
    t.string   "rua"
    t.string   "numero"
    t.string   "bairro"
    t.string   "cep"
    t.string   "cidade"
    t.string   "estado"
    t.string   "pais"
    t.string   "rg"
    t.string   "cpf"
    t.date     "datanascimento"
    t.float    "renda"
    t.text     "observacao"
    t.datetime "created_at",     null: false
    t.datetime "updated_at",     null: false
  end

  create_table "vendas", force: :cascade do |t|
    t.integer  "pessoa_id"
    t.integer  "lote_id"
    t.integer  "quantidade_de_parcelas"
    t.integer  "quantidade_de_parcelas_pagas"
    t.integer  "forma_de_pagamento",           default: 1
    t.decimal  "valor_venda"
    t.decimal  "valor_pago"
    t.date     "data_compra"
    t.boolean  "pagamento_em_dia",             default: false
    t.boolean  "quitado",                      default: false
    t.date     "data_desistencia"
    t.text     "observacao"
    t.datetime "created_at",                                   null: false
    t.datetime "updated_at",                                   null: false
  end

end
insira seu código aqui
4 respostas

Será se seria apenas assim:

@venda.parcelas.build

Para a quantidade de parcelas que eu quisesse?

Opa Nayane, pelo que entendi vc quer gerar as parcelas apenas do lado do servidor... não precisa fazer isso no formulário.. no formulário a pessoa coloca o número de vezes e vc faz isso em memória no servidor. Aí fica bem mais simples. um loop e vc instancia a quantidade de parcelas em função do número solicitado pelo usuário.

Então, é no controller que cria o método ou no model?

for i in 0..n
parcela = Parcela.new
...
end

No medel! Como pegar no controller pra armazenar no banco?

def criar_parcelas
        preco_parcela = valor_venda/quantidade_de_parcelas

        for i in 1..quantidade_de_parcelas
            parcela = Parcela.new
            parcela.venda_id = id
            parcela.numero_parcela = i
            parcela.multa = MULTA
            parcela.juros = JUROS
            parcela.valor_parcela = preco_parcela
            parcela.valor_pago = 0
            parcela.quitada = false

        end
    end