Ayuda con STI y relaciones entre modelos

Hola a todos,

vuelvo a pediros ayuda, esta vez relacionado con las clases STI. Por
todos los sitios donde he buscado no he encontrado una situación como la
que necesito.

Tengo una clase base ‘entidad’ de la que heredan ‘cliente’ y
‘potencial’.

class Entidad < ActiveRevrod::Base

end

class Cliente < Entidad

end

class Potencial < Entidad

end

Pues bien, con esto creo una tabla en la base de datos (entidades) que
guardará todos los atributos de cliente y potencial.

El problema me llega a la hora de realcionar los modelos. Tanto
‘cliente’ como ‘potencial’ tienen una relacion ‘has_and_belongs_to_many’
con una clase ‘interes’. Y luego la clase ‘cliente’ tiene una realción
has_many con una clase ‘direccion’

Estaría bien hacer la relación de los clientes y potenciales con
intereses en el modelo de entidad, o será una realción por cada una?

Me refiero a si sería esto:

class Entidad < ActiveRecord::Base
has_and_beklongs_to_many :intereses
end

o a si sería esto:
class Cliente < Entidad
has_and_beklongs_to_many :intereses
end

class Potencial < Entidad
has_and_beklongs_to_many :intereses
end

Y para el caso de la relación entre el cliente y la dirección, seria
asi?
class Cliente < Entidad
has_many :direcciones
end

P<ra el caso contrario, seria asi?

class Direccion < ActiveRecord::Base
belongs_to :cliente
end

o asi?

class Direccion < ActiveRecord::Base
belongs_to :entidad
end

Y en la tabla de dirección que debería crear, un campo ‘entidad_id’ o un
campo ‘cliente_id’?

Es la primera vez que trabajo con esto y me está liando en esto de las
relaciones.

Gracias por la ayuda

2008/5/26 Carlos F. [email protected]:

Hola a todos,

Hola

Tengo una clase base ‘entidad’ de la que heredan ‘cliente’ y
‘potencial’.
Pues bien, con esto creo una tabla en la base de datos (entidades) que
guardará todos los atributos de cliente y potencial.

Recuerda crear una columna llamada “type” de tipo string.

Estaría bien hacer la relación de los clientes y potenciales con
intereses en el modelo de entidad, o será una realción por cada una?
Pues las partes comunes las pones en la base, y las especiales a las
subclases

class Entidad < ActiveRecord::Base
has_and_belongs_to_many :intereses
end

(por cierto, supongo que es un error, pero es belongs no beklongs)

class Cliente < Entidad
has_many :addresses
end

class Potencial < Entidad
end

end
Creo que aquí es decisión de diseño. Yo usaría la segunda.

Y en la tabla de dirección que debería crear, un campo ‘entidad_id’ o un
campo ‘cliente_id’?

Ahí chico, de memoria no se. Tendrás que mirar la documentación o
probar y equivocarte.

Hola Carlos, te doy una mano en la ultima parte, lo que tienes que hacer
es
“leer” bien la relación:

  • Un cliente tiene muchas direcciones
    class Cliente < Entidad
    has_many :direcciones
    end

  • Una dirección le pertenece a un cliente
    class Direccion < ActiveRecord::Base
    belongs_to :cliente
    end

El belongs_to siempre debe ir en tabla donde va a estar la clave
foránea,
ese es un buen tip para saber donde colocar el belongs_to.

Saludos.

El día 26 de mayo de 2008 9:47, Carlos F. <
[email protected]> escribió: