Forum: Rails-ES Relaciones complejas

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Paco García (Guest)
on 2007-08-02 18:45
(Received via mailing list)
Tengo un problema... a ver que se puede hacer:

Dispongo de una tabla Productos, otra Categoría y otra Subcategoría.

Estas son la reglas de negocio:

 · Un Producto pertenece a una Categoría.
 · Un Producto pertenece también a una Subcategoría.
 · Un Categoría tiene varias Subcategoría.

Hasta aquí la cosa va bien. Tres relaciones 1:N (Producto-Categoria,
Producto-Subcategoria y Categoria-Subcategoria).
Sin embargo hay una cuarta regla de negocio que es la que me tiene
liado:

 · La Subcategoría de un Producto debe pertenecer a la Categoría de éste.

¿Como resolveríais este problema? ¿Hay alguna forma de modelarlo en la
base de datos?
javier ramirez (Guest)
on 2007-08-02 18:55
(Received via mailing list)
Hola,
>  · Un Producto pertenece a una Categoría.
>  · Un Producto pertenece también a una Subcategoría.
>  · Un Categoría tiene varias Subcategoría.
>
>
> ¿Como resolveríais este problema? ¿Hay alguna forma de modelarlo en la
> base de datos?
>
dos enfoques:

categoría => subcategoría =>  producto

categoría => categoría => producto


Con el segundo tienes la ventaja de que puedes anidar tantos niveles
como quieras y que además te permite que un producto tenga una categoría
"Raíz" de las que no pertenecen a ninguna subcategoría. Además, es una
tabla menos que mantener.

Saludos,

javier ramírez
Raul M. (Guest)
on 2007-08-02 19:03
(Received via mailing list)
javier ramirez
escribió:> categoría => categoría => producto

> Con el segundo tienes la ventaja de que puedes anidar tantos niveles
> como quieras y que además te permite que un producto tenga una categoría
> "Raíz" de las que no pertenecen a ninguna subcategoría. Además, es una
> tabla menos que mantener.

+1, si optas por esa vía y la estructura de tus categorías tiene pinta
de árbol quizá quieras echar un vistazo a acts_as_tree:

http://ar.rubyonrails.com/classes/ActiveRecord/Act...


Saludos,
   Raul M.
listas.sguamanb (Guest)
on 2007-08-02 19:05
(Received via mailing list)
Hola,

si existe la restricción que los artículo debe colgar solo de
subcategorías (no se si ese es tu caso) te bastaría con:

categoría has many subcategorías
subcategorías has many productos

podrías rescatar la categoría del producto desde la relación con la
subcategoría y te bastaría con eso, con lo que no es necesario tener la
categoría asociada a los productos, normalizadamente hablando claro.


Paco
García escribió:> Tengo un problema... a ver que se puede hacer:
Paco García (Guest)
on 2007-08-02 19:37
(Received via mailing list)
Únicamente necesito dos niveles (categoría y subcategoría) no necesito
más,
para algunos productos ni siquiera necesito subcategoría (corrección de
la
regla de negocio 2). Me gustaría que quedara modelado todo (o lo máximo
posible) en la base de datos.

¿Nuevas sugerencias?
Emilio T. (Guest)
on 2007-08-02 20:49
(Received via mailing list)
On 8/2/07, Paco García <removed_email_address@domain.invalid> wrote:
> Únicamente necesito dos niveles (categoría y subcategoría) no necesito más,
> para algunos productos ni siquiera necesito subcategoría (corrección de la
> regla de negocio 2). Me gustaría que quedara modelado todo (o lo máximo
> posible) en la base de datos.
>
> ¿Nuevas sugerencias?

Yo lo he implementado parecido a esto, no tengo el codigo a mano pero
deberia andar:

tabla: categories, tiene campo: category_id

class Category < AR
  has_many :products
  acts_as_tree
  validate
    if !parent.nil? and !children.empty?
      errors.add_to_base("No podes tener mas de 2 niveles")
    end
  end
end

class Product < AR
  belongs_to :category
end


Saludos!
Emilio T. (Guest)
on 2007-08-02 20:49
(Received via mailing list)
On 8/2/07, Emilio T. <removed_email_address@domain.invalid> wrote:
>
> tabla: categories, tiene campo: category_id

Perdon, typo => tiene campo: parent_id
ricardo (Guest)
on 2007-08-03 01:29
(Received via mailing list)
Hola, la mejor solucion es la que muy bien dice Emilio y Raul, unas
categorias en arbol o hierarchical data. la solución menos elegante pero
no por ello peor, consiste en modelarlo en la BD con dos tablas,
(categoria y subcategoria)
Xavier N. (Guest)
on 2007-08-03 02:51
(Received via mailing list)
El Aug 2, 2007, a las 11:28 PM, ricardo
escribió:
> Hola, la mejor solucion es la que muy bien dice Emilio y Raul, unas
> categorias en arbol o hierarchical data. la solución menos elegante
> pero
> no por ello peor, consiste en modelarlo en la BD con dos tablas,

Esa ultima tiene ademas la pega de que debes modelar que un producto
pueda pertenecer a una categoria o subcategoria (segun un mail
anterior), con lo que debes tener una polimorfica en Products. Nah,
lo generico en este caso quedara mas sencillo.

-- fxn
Xavier N. (Guest)
on 2007-08-03 06:58
(Received via mailing list)
El Aug 3, 2007, a las 12:50 AM, Xavier N.
escribió:
> Esa ultima tiene ademas la pega de que debes modelar que un
> producto pueda pertenecer a una categoria o subcategoria (segun un
> mail anterior), con lo que debes tener una polimorfica en Products.
> Nah, lo generico en este caso quedara mas sencillo.

Dejame añadir que si bien la implementacion generica parece la mas
sencilla, la API publica de la clase puede estar limitada a categoria/
subcategoria y demas si queda mas comodo.

Es decir, no tienes por que ofrecer la API de arbol de acts_as_tree
asi silvestre si no tiene sentido en la aplicacion, si conviene
puedes añadir una capa fina ad-hoc que delegue en ella. Te quedaria
la implementacion facil por un lado, y el uso esperado por otro.

-- fxn
Gil G. (Guest)
on 2007-08-03 11:07
(Received via mailing list)
Que tal.

Disculpen tengo que hacer un gran cuestioario sobre la recepcion de
individuos en un zoologico, pero como tiene varias secciones como datos
generales, datos de su donante, de su arribo, etc, Lo que pretendo pues
es
el clasico, por partes que al terminar una seccion, pase a la siguiente
y en
la siquiente puede pasar a la otra o regresar a la anterior, lo que no
se es
como ir guardando los diferentes objetos entre el paso de las acciones
que
involucren varios controladores.

Espero me haya podido explicar bien, si alguien tiene alguna referencia
para
hacer esto o sugerencias, se los agradeceria mucho.

_________________________________________________________________
Live Search en Prodigy/MSN. Todo lo que buscas ahora más rapido
http://live.com
Manuel González Noriega (Guest)
on 2007-08-03 11:10
(Received via mailing list)
On 03/08/07, salvador zalapa <removed_email_address@domain.invalid> wrote:
> Que tal.
>
>
> Espero me haya podido explicar bien, si alguien tiene alguna referencia para
> hacer esto o sugerencias, se los agradeceria mucho.

Tienes el plugin acts_as_wizard, no sé que tal está

http://agilewebdevelopment.com/plugins/acts_as_wizard


--
Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.
Gil G. (Guest)
on 2007-08-04 03:09
(Received via mailing list)
Gracias Manuel lo estoy checando, alguna otra sugerencia o como buscar,
no
se si mantener sesiones be objetos sirva tambien? o ando disvariando?


> >
>Manuel, que
>piensa que eres una excelente persona y medra en torno a
>http://simplelogica.net y/o http://simplelogica.net/logicola/
>Recuerda comer mucha fruta y verdura.
>_______________________________________________
>Ror-es mailing list
>removed_email_address@domain.invalid
>http://lists.simplelogica.net/mailman/listinfo/ror-es

_________________________________________________________________
Live Search en Prodigy/MSN. Todo lo que buscas ahora más rapido
http://live.com
This topic is locked and can not be replied to.