Relaciones entre los modelos. #3

Closed
eloyesp opened this Issue Apr 2, 2012 · 8 comments

Comments

Projects
None yet
2 participants
Owner

eloyesp commented Apr 2, 2012

Las relaciones más importantes a realizar son:

  • asunto, estado, status, final y session -> proyecto
  • estado -> comisión
  • asunto -> comisiones

eloyesp was assigned Apr 6, 2012

Owner

eloyesp commented Apr 9, 2012

Para facilitar las relaciones entre los modelos se podría crear un id unico para expediente haciendo

e = expediente
e.id = [ e.numero, e.pasada, e.letra, e.tipo ].hash
#=> 508299593

eso lo podría hacer con expediente (guardando el resultado como expediente.id) y en asunto, sesion, final y estado guardando expediente_id (con los mismos datos) de este modo, no solo se gana velocidad, sinó que hacer las relaciones nos evita hacer un where y cosas así.

Owner

olvap commented Apr 9, 2012

primero que los integer tienen menos de 8 caracteres. De todas formas se puede solucionar usando como fk algo que no sea integer.
segundo que el metodo hash no tira siempre el mismo valor.

› rails c
Loading development environment (Rails 3.2.2)
>> ["a"].hash
=> 702509647
>> exit

diputados/ on master   RVM:1.9.2-p290

› rails c
Loading development environment (Rails 3.2.2)
>> ["a"].hash
=> -177565392

A lo mejor es cuestión de configurar algo. ahora me pongo a investigar, pero acordate que solo son 25000 registros, que tanto podemos hacer para que ande más rápido?

Owner

olvap commented Apr 9, 2012

Despues de tratar de armar un modelo con estados, creo que la mejor forma es crear una id y no usar la concatenacion. usando .hash tendriamos que hacerlo 1 vez junto con la migración. Tambien podríamos usar alguna tabla intermedia donde a cada concatenación le asignamos una id.

Owner

eloyesp commented Apr 9, 2012

Estuve mirando como hacer y estoy por terminar creo, dame un rato más...
creo que puedo crear un id a partir de la concatenación y el crc32. Solo me
falta saber cual es el hashing correcto.
------------------------------------ Eloy

El 9 de abril de 2012 15:54, Oldani Pablo <
reply@reply.github.com

escribió:

Despues de tratar de armar un modelo con estados, creo que la mejor forma
es crear una id y no usar la concatenacion. usando .hash tendriamos que
hacerlo 1 vez junto con la migración. Tambien podríamos usar alguna tabla
intermedia donde a cada concatenación le asignamos una id.


Reply to this email directly or view it on GitHub:
BlueLemon#3 (comment)

Owner

olvap commented Apr 9, 2012

bueno, si logras eso esta muy bueno, pero sino podemos usar algo así.

Modelo

  before_safe :crear_id
  belongs_to :expediente

  def crear_id
    expediente = 
       Expediente.where("numero = ? and letra = ? and pasada = ? and tipo = ?",
       numero, letra, pasada, tipo).limit(1)
  end

end
Owner

eloyesp commented Apr 9, 2012

Bueno, ya encontré como se hace, pero no llegué e hacerlo... mañana lo termino.

Owner

eloyesp commented Apr 20, 2012

Ya están creadas todas las relaciones de proyecto y en base, las migraciones tardan bastante más, pero agregar las relaciones solo implica:

Que la tabla del belongs_to tenga la foreing key, que el modelo tenga el belongs_to y que el modelo de destino (o sea el que tiene el has_one/many) tenga definida la constante LEGACY_CONSTRAINTS y que tenga id. Quedaría mirar la cuestión de las comisiones, que quizás no sea tan facil, pero me imagino que si.

Owner

eloyesp commented Apr 26, 2012

Dejo las relaciones con comisiones en otro issue, para que este no siga dando vueltas.

O sea, las relaciones: asunto, estado, status, final y session -> expediente están hechas y funcan. 6d0b1cc

La relacion expediente -> status también está. 4271741

Faltan las relaciones de temas (que dijeron que era poco importante) y las de comisiones (que no siguen la misma estructura).

eloyesp closed this Apr 26, 2012

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment