Lo que necesitas es el metodo "to_hash" en tu struct. Por desgracia, Struct no
trae tal metodo. Sin embargo, es bastante facil de agregar:
Struct.new "Hola", :a, :b
a= Struct::Hola.new 1, 2
class Struct::Hola
def to_hash
members.inject({}) do |hsh, member|
hsh[member]= self.send(member); hsh
end
end
end
a # => #<struct Struct::Hola a=1, b=2>
a.to_hash # => {"a"=>1, "b"=>2}
Ahora podes hacer:
DerivadoDeActiveRecord.new a.to_hash
P.D.: No te recomiendo procesar un archivo de texto en una action de un
controller.... te imaginas al usuario haciendo click y teniendo que esperar 10
segundos a que le devuelva el request? Ahora imaginate a 5 o 6 usurios al mismo
tiempo haciendo lo mismo....
Fernando Castañeda <[EMAIL PROTECTED]> escribió: Hola Lista :
Como se inicializa un objeto (ActiveRecord) con los elementos de un struct
que le pasa como parametro.
En la definicion de los elementos del struct son los mismos que los
atributos de la clase y tabla que mapea, pero se puede mapear cada elemento
del
struct contra los atributos del objeto automaticamente, sin tener que
definir un initialize en la clase y mapear a mano cada atributo ?
Ej. de codigo :
(Es un tipo encabezado-detalle) (Proceso-Movimiento)
class ProcesosController < ApplicationController
def create
@proceso = Proceso.new(params[:proceso])
estructura = Struct.new(:buque, :matricula, :fecha, :latitud,
:longitud,:rumbo, :vel, :emp, :tipo, :inm, :dnid, :mem,:mmsi, :mdn )
registros = File.open(@proceso.filename).map {|linea| if linea.length >= 106
then estructura.new(linea[0..30].strip, *linea[31..-1].split) end}
registros.each{|x| self.armar_movimiento(x) }
end
end
def armar_movimiento(x)
# X tiene la sig. info => matricula="1200788",buque="San Marcos I",
"fecha="051213", latitud="4244.163S", longitud="06501.443W", rumbo="348",
vel="00.0", emp="0932", tipo="010", inm="G", dnid="470181355", mem="00804",
mmsi="028", mdn="701000925", termid=nil>
movi=Movimiento.new(params[:x])
#aca quisiera que la estruct del struct se mapee automaticamente
#con la estructur del objeto ya que son componetens se llaman iguales
@proceso.movimientos << movi
end
Muchas gracias y espero que se haya entendido
Fernando Castañeda
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
---------------------------------
Yahoo! Noticias
Leé la columna de "El Chavo" Fucks y encontrá una visión distinta de las
Elecciones Presidenciales 2007.
http://ar.news.yahoo.com/elecciones2007/opinion/1979/pinginos-empetrolados _______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar