Buenas, tengo una pequeña duda respecto a como acceder a una tabla de mi
base de datos; os explico un poco:
Tengo la tabla products y la tabla products_descriptions. Esta última
tiene el campo products_name que es al que deseo acceder y las
relaciones entre ambas tablas son:
*Products -> has_many :product_descriptions (Puesto que un producto
tendrá descripciones en diferentes idiomas).
*product_descriptions -> belongs_to :products
Me gustarÃa acceder al campo products_name des del listado de productos
pero no logro hacerlo. Des del listado de products_descriptions se puede
acceder a los campos de la tabla products haciendo simplemente:
<%= products_descriptions.products.NombreDelCampo %>
Pero a la inversa no se la forma de hacerlo. Supongo que es debido a que
estan los nombres en distintos idiomas para un mismo “product_id” dentro
de la tabla product_description no?
Muchas grácias!
Hola,
*Products -> has_many :product_descriptions (Puesto que un producto
tendrá descripciones en diferentes idiomas).
*product_descriptions -> belongs_to :products
una relación 1 a N implica que en un extremo de la relación tienes un
elemento y en el otro tienes muchos. Si estás en un objeto de la parte
correspodiente a “muchos” (el modelo que “belongs_to” al otro) entonces
acceder es tan simple como tú dices
<%= products_descriptions.products.NombreDelCampo %>
… ya que en ese caso no hay ambigüedad posible. Para cada uno de los
modelos del extremo N hay un único elemento en el lado “1” de la
relación.
Cuando ves la relación desde el otro lado, las cosas cambian. A cada
objeto del lado “1” le corresponden varios (has_many) objetos del otro
lado. Por eso mismo lo que tienes si haces
products.products_descriptions
… es una lista de objetos products_descriptions. Para acceder a cada
uno de los campos de cada uno de los objetos en esa lista tendrás que o
bien iterar por ella (con un .each) o bien acceder directamente al
elemento que te interese (con un [index], donde index es un número que
empieza por cero, claro)
por ejemplo: products.products_descriptions[0].name
te darÃa el name del primer products_descriptions (asumiendo que las
relaciones están bien definidas y que efectivamente existe al menos un
products_description asociado. Si no te darÃa una exception).
saludos,
javier ramirez
… ya que en ese caso no hay ambigüedad posible. Para cada uno de los
modelos del extremo N hay un único elemento en el lado “1” de la
relación.
Cuando ves la relación desde el otro lado, las cosas cambian. A cada
objeto del lado “1” le corresponden varios (has_many) objetos del otro
lado. Por eso mismo lo que tienes si haces
products.products_descriptions
… es una lista de objetos products_descriptions. Para acceder a cada
uno de los campos de cada uno de los objetos en esa lista tendrás que o
bien iterar por ella (con un .each) o bien acceder directamente al
elemento que te interese (con un [index], donde index es un número que
empieza por cero, claro)
por ejemplo: products.products_descriptions[0].name
te darÃa el name del primer products_descriptions (asumiendo que las
relaciones están bien definidas y que efectivamente existe al menos un
products_description asociado. Si no te darÃa una exception).
saludos,
javier ramirez
Muchas grácias, entendÃa el tema de las relaciones 1 a n pero no sabia
que se podia acceder a ellas como un array con el tema de [index].
Una exlpicación digna de enciclopedia!
Hasta pronto!