Usando um has_many, :through
|
|
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. |
|
|
|
|
|
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? |
|
|
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 … |
|
|
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 |

