JavaFree.org | RubyOnBr.org

Usando um has_many, :through

Acompanhar Usando um has_many, :through 5 posts, 3 participantes

440002948_b8dc8436b4 Marcelo Júnior 811 posts

Exemplo: Tenho a seguinte estrutura:


Bem, para trabalhar com isto, estou fazendo o seguinte no controller:

Gostaria de saber se é assim mesmo que se trabalha, se existe alguma outra forma de melhorar isto, deixar mais OO.

 
Avatar Shairon Toledo 1428 posts
 
440002948_b8dc8436b4 Marcelo Júnior 811 posts

Só pra constar. Dessa forma como o shairon mostrou, funfeia apenas com o create, e não com o new.

E agora outra pergunta relacionada. Bem digamos que na classe ItensCliente, eu tenha além dos atributos cliente_id e item_id, um campo ‘quantidade’. Como eu faria para preencher tbm esse atributo?

 
Avatar antonio 196 posts

Desenvolver um ORM não é uma tarefa fácil. Principalmente tratar os relacionamentos muitos-para-muitos. É díficil chegar a uma solução limpa, elegante e sem disparar os erros assombrosos de circularidade.

Acredito que tenho mudado o código do Avant cerca de 5 vezes para encontrar uma solução para este problema.

Principalmente porque a semelhança entre objetos e algebra relacional para logo no um-para-um e um-para-muitos. O que eu quero dizer é que para a algebra relacional, entidades ricas(M-N) faz todo o sentido, enquanto que para objetos esta nova entidade simplesmente não tem significado.

Tenho imaginado um ORM livre dos mecanismos de keys da algebra relacional. Isto é, relacionar entidades sem a explicitação de keys (Algo sem belongs_to, id, user_id para ser mais exato).

Como Avant trata uma relação muitos-para-muitos:

Quando o Avant detecta essa cardinalidade, ele automaticamente encanta um novo modelo ProductToSupplier. Essa é uma convenção que eu adotei baseado na idéia do pessoal do Og.

Se você quiser colocar um dado neste novo modelo encantado, simplesmente:

Acessando:

Essa foi a única maneira que encontrei de lidar com relacionamentos(M-N) de forma limpa. Humildimente, pergunto, vocês tem alguma solução melhor? pode ser conceitualmente … algo como vocês gostariam que fosse …

 
Avatar antonio 196 posts

MMmmM acho que da para fazer um POG violento aqui, vamos ver

O modelo encantando fica escondido por de trás do relacionado …

acho que fica mais transparente que a anterior :D