Rails complicación con Modelos

8 views
Skip to first unread message

Germán Alberto Gimenez Silva

unread,
Jan 9, 2017, 5:57:00 AM1/9/17
to rub...@googlegroups.com
Hola,

Tengo una consulta:

Tengo que generar una relación entre un Modelo que pertenece a dos modelos diferentes, para esto implementé una asociación polimorfica. Pero Chan! eso hace que se pierda mucho tiempo en Deployar, entonces me pasaron esta alternativa como plausible:

Additionald
e_id (1) -> (n) Entity
ei_id  (1)->(n)  EntityItems

ahora debo poner en el modelo un condicional, si e_id es nil entonces ei_id no puede ser null y si ei_id es nil e no puede ser nil.

¿y estoy bloqueado con esto, alguien tendra una idea de como hacerlo?
ensaye esta solución pero hace lo contrario (solo acepta cuando los dos no son nil)

validates_presence_of :e, :if => :ei_id?
validates_presence_of :ei, :if => :e_id?
def e_id?
e_id.nil?
end
def ei_id?
ei_id.nil?
end


Gracias de antemano y saludos.
--

Giménez Silva Germán Alberto


Pablo Oldani

unread,
Jan 9, 2017, 7:58:07 AM1/9/17
to rub...@googlegroups.com
No estoy seguro que tiene que ver el deploy en eso, pero cuanto más demora? Que versión de rails estás usando?

--
Nuestra página web es: http://rubylit.github.io/
 
Para anular la suscripción a este grupo, envía un mensaje a rubylit-unsubscribe@googlegroups.com
---
Has recibido este mensaje porque estás suscrito al grupo "rubylit" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a rubylit+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Germán Alberto Gimenez Silva

unread,
Jan 9, 2017, 8:03:33 AM1/9/17
to rub...@googlegroups.com
2017-01-09 9:58 GMT-03:00 Pablo Oldani <oldani...@gmail.com>:
No estoy seguro que tiene que ver el deploy en eso, pero cuanto más demora? Que versión de rails estás usando?

Yo, no estaría decidiendo esa parte. Lo que sucede que migrar una foreing key a una associación polimorfica haría que la aplicación deje de funcionar durante un buen tiempo (ya que correr todos los test lleva 2 horas)
Por eso la solución sugerida, que es bastante fea pero es lo que hay.

la version de Rails es "Rails 3.2.22.2"

Armando Andini

unread,
Jan 9, 2017, 8:34:57 AM1/9/17
to rubylit
No conozco el dominio la aplicacion pero pareceria a simple vista que la forma de resolverlo es media rebuscada.  Seria muy complicado refactorearlo?

De todas maneras, si queres hacer una validacion para que solo uno este seteado lo podes hacer con una custom:

validate :associated_entity

def associated_entity
 
unless !!e_id ^ !!ei_id
    errors
.add(:base, 'either an Entity or EntityPost should be associated, and not both.')
  end
end

El operador ^ es el xor, devuelve true cuando los operandos son distintos, y el '!!' hace que un valor se transforme en booleano. 

Espero que sirva saludos!

Germán Alberto Gimenez Silva

unread,
Jan 9, 2017, 10:01:26 AM1/9/17
to rub...@googlegroups.com
Gracias Armando, 

me doy una vuelta la semana que viene por el Hack Lab y ves que onda. Pero creo que eso me puede servir bastante.

Saludos.

--
Nuestra página web es: http://rubylit.github.io/
 
Para anular la suscripción a este grupo, envía un mensaje a rubylit-unsubscribe@googlegroups.com
---
Has recibido este mensaje porque estás suscrito al grupo "rubylit" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a rubylit+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Armando Andini

unread,
Jan 9, 2017, 10:54:24 AM1/9/17
to rubylit
Me alegro que te sirva :)

La semana que viene yo no voy a estar en la oficina pero Pablo y Julio me parece que si.

Saludos!
Para anular la suscripción a este grupo, envía un mensaje a rubylit-u...@googlegroups.com

---
Has recibido este mensaje porque estás suscrito al grupo "rubylit" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a rubylit+u...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages