GEtna - Ep. 3: Mapeando Tabelas do Banco de Dados
Primeiro passo de nosso gerador Rails era buscar todas as tabelas do banco de dados e criar a estrutura inicial... outro problema após algumas horas vendo documentação... bingo! nada XD, Pedindo ajuda para nossa comunidade de sábios desenvolvedores do rails-br, obtive varias sugestões como: De Buscar Pelo Model de Abraão Coelho, Cássio Marques, infelizmente não serviu, pois ainda não tenho model algum, necessito cria-los. teve uma otima ideia, já que até agora eu defini que o banco seria MySQL poderia fazer um simples:
mysql> show tables; <= mostra as tabelas;
mysql> describe suatabela; <= exibe sua tabela com as descrições do campo.
OK, Mas queria algo mais pratico, tinha certeza que o ActiveRecord poderia fazer isso, e não ia desistir de encontrar.
Estava tentando algo bem bobo como:
ActiveRecord::Base.column_names
Me deparei com o seguinte erro:
NoMethodError: undefined method `abstract_class?' for Object:Class
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1915:in `class_of_active_record_descendant'
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1277:in `base_class'
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1012:in `reset_table_name'
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1008:in `table_name'
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1145:in `columns'
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1158:in `column_names'
from (irb):16
Ricardo S Yasuda e Davis Zanetti Me abriram os olhos quanto ao metodo que só funciona em uma instancia do ActiveRecord e não em uma Classe Abstrata, isso foi muito importante para a minha conclusão.
Deu uma dica boa sobre Adapters mas isso ainda não era claro pra mim, mas foi muito importante isso ai.
Juan Maiz então me endicou uma saída, utilizar o Sequel Uma solução perfeita para meus problemas, mas fiquei um pouco desanimado pensando que o ActiveRecord... o Poderoso ActiveRecord não tinha tal funcionalidade... e tambem que meu simples generator tenha que usar alguma dependência tão primitivamente para realizar uma pequena tarefa. Bom não desisti e fui feliz em minha busca e insistência.
@con = ActiveRecord::Base.connection
@table_names = @con.execute('show tables')
Está ai, nossas tabelas :) legal né, saí juntando as dicas do pessoal todo e bingo, saiu alguma coisa, bom com isso já posso começar..., mas como sou meio curioso e me animei com esse negocio e não custava nada dar uma adentrada a mais... olha o que descobri...
@con = ActiveRecord::Base.connection
@table_names = @con.tables
:D Que legal, não era que o ActiveRecord Tinha mesmo o bendito Método... só um pouco de pesquisa e fica simples.
Agradeço a toda a Comunidade.
Abraços