
XML no ActiveRecord
Junho 8, 2008Bem Pessoal , hoje vamos falar um pouco de XML com Ruby on Rails, mais precisamente nos ActiveRecord.
Existe um método no ActiveRecord que é o to_xml, ele retorna os dados de um Model, ou os dados de uma coleção no formato XML. Vamos a alguns Exemplos:
Temos a tabela Produtos com os seguinte atributos:
* id
* nome
* descricao
* preco
Em nossa aplicação temos o Model Produto, referente a tabela Produtos.
Vamos criar um controller para que possamos testar o metodo de conversão pra XML.
ruby script/generate controller produtos
então vamos editar o arquivo criado em app/controller/produtos_controller.rb
class ProdutosController Produto.find(params[:id]).to_xml
end
end
Então acessando o endereço http://localhost:3000/aplicacao/produtos/produtoXml?id=1 aparecerá:
<produto><descricao>Monitor LCD 17′<<!–descricao><id type=”integer“>1<!–><nome>moinitor<<!–nome><preco type=”integer“>600<<!–preco></produto>
legal né ? bem pratico .
Certo, mas o método não é so isso. Por exemplo, vamos dizer que não tivéssemos a necessidade da descrição do produto no XML, então poderiamos fazer da seguinte forma:
<code>...
render :xml => Produto.find(params[:id]).to_xml(:except=>:descricao)
…
Tendo como resultado:
xml version=”1.0″ encoding=”UTF-8″ ?>
<produto><id type=”integer“>1<<!–id><nome>moinitor<!–><preco type=”integer“>600<<!–preco>
<<!–/produto>
Interessante hein ? Ou senão vamos dizer que precise somente do id e o nome do produto. Poderíamos usar o :only da seguinte forma:
…
render :xml => Produto.find(params[:id]).to_xml(:only=>[:id,:nome])
…
Certo. mas não paramos por ai, o to_xml funciona com Array tambem , como por exemplo:
…
render :xml => Produto.find(:all).to_xml(:only=>[:id,:nome])
…
Tendo como resultado:
<produto><id type=”integer“>1<<!–id><nome>moinitor<!–>><produto><id type=”integer“>2<!–><nome>Gravadora de DVD<<!–nome><!– </produto >
Então pelo que viamos é bastante simples trabalhar com XML nos ActiveRecord. Até a próxima pessoal!