Boa tarde.
Gostaria de tirar uma dúvida de como tratar com heranças no rails.
Imaginando, por exemplo, as 3 seguintes classes:
--------------------
Pessoa
@nome
--------------------
----------------------------------------
PessoaFisica < Pessoa
@cpf
----------------------------------------
----------------------------------------
PessoaJuridica < Pessoa
@cnpj
----------------------------------------
Seguindo o padrão normal de modelagem, seriam 3 tabelas,
Mas eu ainda não consegui visualizar como o Rails trabalharia
nesse caso. Por favor, peço que vocês me orientem, eu realmente
preciso entender essa questão de herança no rails.
Não sei como funcionaria um CRUD nessa situação, se eu tivesse
que, por exemplo, salvar uma nova pessoa jurídica no banco.
Sei que esse exemplo pode ser bem simples, mas eu só preciso
enxergar a maneira correta de trabalhar herança com o rails, e
esse exemplo vai me servir bem como ilustração.
Grato,
Nonato.
--
Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.
Olá, agradeço a resposta de todos.
Mas minha dúvida é justamente se eu tenho que
mudar a forma comum de programar para adotar
a maneira rails??
Eu tenho um banco de dados já modelado e pronto
que trabalha com PHP e salva os dados da forma
antiga, ou seja, as informações da classe Pessoa
vai para a tabela "Pessoas" e as informações da
classe PessoaJuridica vai para a tabela PessoaJuridica.
Nesse caso eu terei que adaptar todo o banco, pra pode
trabalhar com apenas uma Tabela que, em si própria,
contenha todos campos referente tanto a PessoaFisica
quanto a PessoaJuridica??
Não é meio estranho eu ter esses campos extras na mesma
tabela?? No exemplo que eu cite, só há um campo diferente
para cada classe (@cpf e @cnpj). Mas se eu tivesse varias
subclasses, com vários campos diferentes, eu vou ter que
colocar todos esses campos numa só tabela??
Se for isso, eu realmente, acho extremamente deselegante.
Mas eu peço que me corrijam se eu estiver enganado, por favor.
Ainda estou engatinhando no rails, por isso não consigo
visualizar algumas coisas que para muitos de vocês, são
obvias, rsrsr.
grato,
Nonato
desculpem a minha ignorância,
mas o que seria STH?? rsrs
Essa questão de trabalhar com heranças com rails me incomoda bastante.
Eu faço da minha maneira, mas
sempre me pergunto se existe uma "forma mais adequada" de trabalhar
com subclasses nessa situação, principalmente no que diz respeito a
CRUD e modelagem de tabelas.
Como seria a "forma mais adequada" de se trabalhar com essa questão no
Rails??
Abraços,
Beto Polione.
Agora consegui postar, heheh
Beto, eu acho que STH deve ser algo relacionado
ao que eu li, o "Single Table Inheritance".
Pessoal, a questão que eu tenho é a seguinte:
Tendo uma classe "Automovel", junto com as subclasses:
"Carro", "Moto", "Barco", "Caminhao", "Aviao", "Onibus",
onde cada uma dessas 6 subclasses tem, no mínimo 7 atributos
específicos de cada uma delas.
Eu teria q modelar um "tabelão" com 42 campos (7x6) extras,
sendo que cada linha de registro na tabela só usaria uns 10
campos, ou seja, iriam sobrar mais de 30 campos para cada
registro. Eu enxergo isso como uma forma "extremamente" deselegante
de se resolver um problema, pois, sem dúvida alguma, a melhor
forma seria criar uma tabela para cada subclasse.
Gostaria de uma orientação quanto a isso, pois, como havia dito,
ainda estou engatinhando no rails. Por favor, alguém poderia
me mostrar uma melhor alternativa, para não ter que usar
"Single Table Inheritance", uma vez que ficaria extremamente
fora dos padrões "corretos" de modelagem de banco de dados.
Agradeço desde já,
Nonato.
Mas, só por questão de aprendizado e curiosidade, como vocês
resolveriam isso se "tivesse" que usar banco de dados relacional??
Gostaria de saber a opinião de vocês quanto a isso, pois, assim como o
Nonato, eu também estou engatinhando no rails e afinal de contas, é
sempre um aprendizado escutar as dicas de quem já tem experiência no
assunto.
Abraços,
Beto Polione.
--
Class Veiculos < ActveRecorde::Base
@id
@nome
@cor
@ano
@motor
@type
@dados_especificos_id
end
Class CarData < Veiculos
@id
@ar_condicionado
@farol_de_milha
end
Clas TruckData < Veiculos
@id
@numero_de_rodas
end
No meu controller, eu vou poder trabalhar com essas
classes fazendo operações como essas?:
@carro = CarData.new
@caminhao = TrukData.find_by_ano(2000)
@carro.save
E ele vai salvar automaticamente nas tabelas referente
a cada classe???
Eu dei uma lida sobre Associação Polimórfica, mas não
consigo ligar isso ao conceito de herança. Peço que
vocês me ajudem, por favor.
Muito grato, desde já,
Beto Polione
Pessoal,
eu estou dando uma estudada em associação polimófica pra
poder usá-lo em heranças, como no exemplo acima. Mas parece
tudo estranho. Não sei se é pelo fato de não estar habituado.
Porque em linguagens como o C#.net por exemplo, eu iria poder
acessar um atributo da classe pai (Automovel) diretamente,
utilizando algo como:
Carro meuCarro = new Carro;
meuCarro.cor = "Vermelho";
Já no rails, parece q temos q instanciar dois objetos, cado um
objeto referente à uma classe especifica (Veiculo e Carro).
Depois fazer uma atribuição da objeto @carro dentro do objeto
@veiculo.
E não consegui ver um exemplo que utilize acesso direto, como
no caso acima (a não ser que eu utilize STI, q não é o caso).
Provavelmente eu ja tow sendo chato, mas é que ainda não consegui
compreender a como isso funciona no Rails. Será que alguém poderia
só escrever um exemplo em Rails comparando com o exemplo acima em C#?
Muito grato,
Nonato
Eu tava pesquisando, e vi algumas pessoas comentando
sobre composição em vez de herança.
Como funcionaria isso utilizando composição no rails??
Beto Polione
Por padrão o rails utiliza o ActiveRecord como ORM. Como já foi dito, o
AR implementa herança usando o pattern STI.
http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html
O DataMapper tbém usa STI...
Se você tem um db legado, acho que ter que lidar com as associações...
[]'s
Gustavo
On Sun, 21 Mar 2010 09:52:36 -0700 (PDT), Nonato <nen_n...@hotmail.com>
wrote:
Enviado de meu iPhone
Em 21/03/2010, às 15:11, bpfg_s...@yahoo.com.br <bpfg_s...@yahoo.com.b
r> escreveu:
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "rail
> s-br" dos Grupos do Google.
> Para postar neste grupo, envie um e-mail para rail...@googlegroups.com
> .
> Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+unsubscribe@googlegroups.c
Só que eu encontrei algumas pessoas criticando
à repeito de que utilizando associação polimofica
a gente perde o conceito de metodos polimorficos.
Eu realmente acho q isso é verdade, já q as classes
filhas (Carro, Moto), não vão herdar os métodos da
classe pai (Automovel).
Há como contornar isso??
Beto Polione
Nativamente o ActiveRecord do Rails so trabalha em STI (Single Table
Inheritance), n�o trabalha com CTI (Class Table Inheritance) que seria a
forma que voce precisa, na forma CTI voce teria que implementar tudo na m�o,
ai acho que voce acaba fugindo um pouco do conceito do Rails, e isso poderia
te trazer muito trabalho.
Abs
Vin�cius
--------------------------------------------------
From: <bpfg_s...@yahoo.com.br>
Sent: Sunday, March 21, 2010 6:53 PM
To: "rails-br" <rail...@googlegroups.com>
Subject: [rails-br] Re: D�vida Sobre Heran�a em Rails
> Comecei a entender um pouco melhor.
>
> S� que eu encontrei algumas pessoas criticando
> � repeito de que utilizando associa��o polimofica
> a gente perde o conceito de metodos polimorficos.
>
> Eu realmente acho q isso � verdade, j� q as classes
> filhas (Carro, Moto), n�o v�o herdar os m�todos da
> classe pai (Automovel).
>
> H� como contornar isso??
>
> Beto Polione
>
> --
> Voc� est� recebendo esta mensagem porque se inscreveu no grupo "rails-br"
> dos Grupos do Google.
> Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
> Para cancelar a inscri��o nesse grupo, envie um e-mail para
> rails-br+u...@googlegroups.com.
> Para obter mais op��es, visite esse grupo em
> http://groups.google.com/group/rails-br?hl=pt-BR.
>
Mas h� alternativas, existem plugins, um deles �:
http://github.com/sava/class_table_inheritance/
No caso para o reaproveitamento de m�todos voce poderia utilizar Modulos nas
models.
Abs
Vinicius
--------------------------------------------------
From: <bpfg_s...@yahoo.com.br>
Sent: Sunday, March 21, 2010 6:53 PM
To: "rails-br" <rail...@googlegroups.com>
Subject: [rails-br] Re: D�vida Sobre Heran�a em Rails
> Comecei a entender um pouco melhor.
>
> S� que eu encontrei algumas pessoas criticando
> � repeito de que utilizando associa��o polimofica
> a gente perde o conceito de metodos polimorficos.
>
> Eu realmente acho q isso � verdade, j� q as classes
> filhas (Carro, Moto), n�o v�o herdar os m�todos da
> classe pai (Automovel).
>
> H� como contornar isso??
>
> Beto Polione
>
> --
> Voc� est� recebendo esta mensagem porque se inscreveu no grupo "rails-br"
> dos Grupos do Google.
> Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
> Para cancelar a inscri��o nesse grupo, envie um e-mail para
> rails-br+u...@googlegroups.com.
> Para obter mais op��es, visite esse grupo em
> http://groups.google.com/group/rails-br?hl=pt-BR.
>
Mais um exemplo e plugin:
http://oldwiki.rubyonrails.org/rails/pages/ClassTableInheritanceInRails
Abs
Vinicius
--------------------------------------------------
From: <bpfg_s...@yahoo.com.br>
Sent: Sunday, March 21, 2010 6:53 PM
To: "rails-br" <rail...@googlegroups.com>
Subject: [rails-br] Re: D�vida Sobre Heran�a em Rails
> Comecei a entender um pouco melhor.
>
> S� que eu encontrei algumas pessoas criticando
> � repeito de que utilizando associa��o polimofica
> a gente perde o conceito de metodos polimorficos.
>
> Eu realmente acho q isso � verdade, j� q as classes
> filhas (Carro, Moto), n�o v�o herdar os m�todos da
> classe pai (Automovel).
>
> H� como contornar isso??
>
> Beto Polione
>
> --
> Voc� est� recebendo esta mensagem porque se inscreveu no grupo "rails-br"
> dos Grupos do Google.
> Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
> Para cancelar a inscri��o nesse grupo, envie um e-mail para
> rails-br+u...@googlegroups.com.
> Para obter mais op��es, visite esse grupo em
> http://groups.google.com/group/rails-br?hl=pt-BR.
>
Mas, como assim perde os métodos polimórficos? Fiquei meio confuso. =]
Quanto essa técnica de composição, no que ela consiste? é a melhor
alternativa no rails, em vez de associação polimórfica??
VaLew pessoal,
esse grupo é show, vejo tantos outros lugares a galera com a maior
má vontade em responder, ao contrário de vocês, que sempre auxiliam
quem está começando. Tão de parabéns. =)
Abraços
Nonato.
segundo o que eu entedi, composição vc vai incluindo os módulos, acho
q é isso.
Mas não sei bem como funciona.
Abçs.
Beto Polione
Da uma olhada de como utilizar o conceito de associações em
http://guias.rubyonrails.pro.br/association_basics.html
Enviado de meu iPhone
Em 21/03/2010, às 15:11, bpfg_s...@yahoo.com.br <bpfg_s...@yahoo.com.br> escreveu:
Olá Vinicius, obrigado pelo link.
Eu tava pesquisando, e vi algumas pessoas comentando
sobre composição em vez de herança.
Como funcionaria isso utilizando composição no rails??
Beto Polione
--
Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.
--
Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.