Início > ruby on rails, Uncategorized > relacionamento has_many

relacionamento has_many

bom nada melhor do que começar falando de relacionamento,
porque relacionamento é importante dizendo de uma forma técnica e simples que server para relacionar dados entre tabelas, vamos supor
assim uma loja, nessa loja você tem clientes esses clientes tem dividas em sua loja em tão como podemos fazer,vamos criar uma tabela cliente e uma tabela divida cada cliente vai ter sua divida certo então o devemos fazer relacionar cada cliente como sua divida. chega de papo vamos colocar isso em pratica.

vamos lá no meu terminal criar um projeto

rails loja

cd loja

vamos criar um scaffod algo bem simples só como exemplo.

primeiro clientes.

ruby script/generate scaffold cliente nome:string endereco:string rg:string cpf:string telefone:string

agora dividas

ruby script/generate scaffold divida cliente_id:integer valor:decimal vencimento:date tipo:string

para que esse (cliente_id:integer) cliente é o nome da tabela e eu estou colocando ele dentro da tabela divida essa é uma forma de ligar elas .

nesse (tipo) nos vamos por um select informado pago ou pendente mais para frente.

vamos dar um rake

rake db:migrate

e vamos ver como ficou

ruby script/server

vamos lá então ver as apps

primeiro de tudo vamos criar o relacionamento

entao entre em model/cliente

e vamos por

has_many :dividas

o que estou dizendo com isso?

estou dizendo (um para muitos )

no nosso caso um cliente para muitas divida

tambem temos o belongs_to que ao contrario de has_many quer dizer muitos para um não vamos usar nesse exemplo mas em outra oportunidade estarei falando mais.

ok até aqui, vamos ver nossas views

vamos em views/dividas copie os arquivos index.html.erb e new.html.erb e cole na pasta views/clientes e edite o nome do arquivo para _index_divida.html e _new_divida.html não esqueça de por underline( _ )antes se não vai dar erro.

dentro da _index_divida.html você tem

<% @dividas.each do |divida|%>

altere isso para

<%  for divida in dividas %>

e dentro da _new_divida.html você tem

<% form_for(@divida) do |f| %>

altere isso para

<% form_for(divida) do |f| %>

simplesmente tire o (@)

tem bem coloque um select no lugar do (tipo)

<p>

<%= f.label :valor %><br />

<%= f.text_field :valor %>

</p>

altere para

Tipo:<%= f.select :tipo, “<option>PAGO” “;%= f.select :tipo, “<option>PAGO” “;%= f.select :tipo, “<option>PAGO” “

agora em views/clientes dentro do show.html vamos criar as parciais (partial)

<%= render :partial=>”index_divida”, :locals=>{:dividas =>@cliente.dividas} %>

<%= render :partial=>”new_divida”, :locals=>{:divida =>Divida.new(:cliente_id=>@cliente.id)}%>

preste muita atenção nos plurais (s) e nos maiusculos e minusculos

salve e execute isso.
crie um cliente e veja que dentro do esta new divida e a index relacionada para cada cliente crie um outro cliente e veja que as dividas que você crio dentro do primero cliente não aparece no segundo cliente e assim vise versa quer dizer que deu tudo certo e que cada cliente tem a sua divida .

em outra oportunidade estarei falando mais afundo sobre  partial

Até a próxima .

  1. lucas
    fevereiro 9, 2010 às 6:13 pm | #1

    cara faz tento que estou procurando algo sobre relacionamento nossa e o material esta super bom
    parabens

  2. Armando
    novembro 6, 2010 às 3:06 pm | #2

    Ola, comecei a me aventurar recentemente pelo mundo de RoR e enquanto fazia esse tutorial troquei a linha :

    ruby script/generate scaffold cliente nome:string endereco:string rg:string cpf:string telefone:string

    por:

    rails generate scaffold cliente nome:string endereco:string rg:string cpf:string telefone:string

    pois do primeiro nao estava funcionando, alguma diferenca entre os dois metodos??

    abcs

    • novembro 8, 2010 às 11:40 am | #3

      nao nao isso vai variar da verso e plataforma tah tudo certo,
      qualquer coisa estamos ai

      abraco

  1. janeiro 2, 2011 às 5:53 pm | #1

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.