cassiosantana / ruby_study

0 stars 0 forks source link

39 - Ruby on Rails - Estruturas Dependentes #8

Closed cassiosantana closed 1 year ago

cassiosantana commented 1 year ago

Aula 39

Estruturas dependentes

Esta aula depende do projeto rails criado na aula anterior. Será demonstrado como funciona o relacionamento entre elementos de uma aplicação quanto à dependencias do tipo: model que é depende de outro model.

Primeiramente vamos criar 2 scaffolds, pedido e item_pedido para este projeto sendo o item_pedido dependente de pedido e de carro.

rails g scaffold pedido client_id:integer valor_total:float status:string
rails g scaffold item_pedido pedido:references carro:references valor:float

migração

rails db:migrate

Criando relacionamento entre pedido e item_pedido

class Pedido < ApplicationRecord
  has_many :item_pedidos
end

Para alterar referências entre tabelas primeiramente devemos desfazer a criação da tabela no banco de dados podendo fazer o rollback ou apagando a tabela diretamente e de pois rodar o rails g utlizando a flag --force

rails g scaffold pedido client:references valor_total:float status:string --force

Este comando irá recriar a tabela pedido no DB de forma correta onde ela terá referência para o cliente

Continuar aqui https://youtu.be/TLh4mtEEITo?t=1009

Como fazer para que os pedidos dependam de itens de pedido:

Chama-se dependência de rotas:

  resources :pedidos do
    resources :item_pedidos
  end

Agora que as rotas foram alteradas, para acessar estes itens de pedido, primeiramente devemos ver as rotas disponíveis no sistema com o comando 'rails routes' para entender o caminho e assim fazer o link entre o pedido e item de pedido pois os caminhos anteriormente criados para estes itens de pedidos não existem mais e a aplicação quebra.

Fazer a alteração dos links baseados nas novas rotas de itens de pedido:

<td><%= link_to "Itens", pedido_item_pedidos_path(pedido) %></td>
<%= link_to "New item pedido", new_pedido_item_pedido_path %>

Sempre que estivermos trabalhando com itens de pedido precisamos ter a instância do pedido deste item de pedido.

Continuação: https://youtu.be/TLh4mtEEITo?t=1376