Dúvida Hash
|
|
Aew galera, olha eu de novo só incomodando rs..Estou com uma dúvida no rails agora,recebi o xml e converti pra hash nos controllers, como eu faço pra selecionar só alguns campos desse hash para salvar no banco? |
|
|
Se é para trabalhar com XML tente usar o nokogiri mais facil. |
|
|
Como está o seu hash ou xml? Coloca ai para brincarmos… []’s |
|
|
|
|
|
O xml está assim <?xml version="1.0" encoding="UTF-8"?> <ResponseAcessorioVeiculo> <AcessorioVeiculo> <veiID>1</veiID> <acvID>23</acvID> </Veiculo> <Veiculo> <veiID>2</veiID> <acvID>433</acvID> </Veiculo> <Veiculo> <veiID>21</veiID> [int] <acvID>232</acvID> [int] </Veiculo> </AcessorioVeiculo> </ResponseAcessorioVeiculo> O hash prefiro não por aqui pq na verdade esse xml tem umas 300 linhas, então eu consigo salvar a primeira linha no banco, mas o resto não consigo, como faço o loop que controle isso. |
|
|
Não está saindo o xml aqui, puz um espaço na frente de cada um pra sair agora, mas então utilizando o hash só consigo salvar na primeira linha, se alguem tiver algum exemplo e puder me ajudar ai agradeço. <?xml version="1.0" encoding="UTF-8"?> < ResponseAcessorioVeiculo> < AcessorioVeiculo> < veiID>#</veiID> [int] < acvID>#</acvID> [int] < /AcessorioVeiculo> < AcessorioVeiculo> < veiID>#</veiID> [int] < acvID>#</acvID> [int] < /AcessorioVeiculo> < AcessorioVeiculo> < veiID>#</veiID> [int] < acvID>#</acvID> [int] < /AcessorioVeiculo> < /ResponseAcessorioVeiculo> |
|
|
use tag pre |
|
|
@Shairon, qual a versão do ruby que você está utilizando? Aqui o seu exemplo não funcionou. Eu consigo chegar nesse resultado:
Não consigo transformar em Hash, só se eu faço isso:
Estou usando esse:
Será que estou “batendo a nave” em algum lugar? |
|
|
Dorô: Chama um flatten depois do teu select que deve resolver o problema e gerar o hash da maneira que o Shairon falou. |
|
|
@mereghost, Fiz um teste rápido aqui e não foi tbm. Qndo chegar em casa vou brincar mais um pouco.
>> h.select{|k,v| c.include? k}.flatten
=> [:c, 3, :a, 1]
Valeu. |
|
|
Então… passa pro Hash.new esse call. |
|
|
@merefhost, Desse jeito não vai bro, olha ai:
O array vai como um único parâmetro. Tem como mostrar na prática =] abs, |
|
|
>> h = { :a => 1, :b => 2, :c => 3, :d => 4 }
=> {:b=>2, :c=>3, :d=>4, :a=>1}
>> c = [:a, :c]
=> [:a, :c]
>> h.select{|k,v| c.include? k}.flatten
=> [:c, 3, :a, 1]
>> Hash[h.select{|k,v| c.include? k}.flatten]
=> {}
>> Hash[*h.select{|k,v| c.include? k}.flatten]
=> {:c=>3, :a=>1}
>>
Faltou o asterisco =) |
|
|
@rrsilva, com o asterisco vai na boa, mas do outro jeito que parece ter funcionado para o @shairon e @mereghost, não rola aqui. Pode explicar o que o asterisco fez exatamente? |
|
|
Splat! Das mioh coisa q a teno… ;) |
|
|
Pode crer, já tinha visto isso em um coding dojo que participei. alguma coisa assim: Só achei bem diferente a forma como foi usado no Has[*h]. Legal. Valeu! |
|
|
Vdd, eh comum em argumentos de metodo. Um uso por ex eh lambda, suponha um named_scope: named_scope :some, lambda { |*args| …… } |
|
|
Não costumo usar, acho que preciso pensar mais no jeito ruby de fazer as coisas =] vlw |

