Insertar registros en la tabla intermedia de una relacion has_many :through


#1

Hola Tengo una acerca de las relaciones has_many :through

desde un controller estoy haciendo esto:

@budget_category =
@category.budget_categories.find(:first,:conditions=>[‘budget_id=?’,
@budget])
@item = Item.find_or_create_with_like_by_name(
(params[:item][:name]) )
@budget_category.items << @item

mi pregunta es , como puedo insertar valores en la tabla intermedia de
esta
relacion :

budget_categories

budget_categories_items

items

me imagino distintas formas de hacerlo, pero no se si hay alguna forma
estándar y simple para lograr esto, ya que lo que me imagino es un poco
rebuscado y tengo mis sospechas de que sea la mejor solucion.

algo como


@budget_category.items << @item
@budget_categories_items = BudgetCategoryItem.find(:first ,
:conditions=>[“budget_id?= AND item_id?=”, @budget , @item])
@budget_categories_items.update_attributes(params[:item][:budget_categories_items])

alguna idea ?

Saludos!

Atte.
Miguel Michelson Martinez


#2

2009/3/19 Miguel M. removed_email_address@domain.invalid

mi pregunta es , como puedo insertar valores en la tabla intermedia de esta
relacion :

En los modelos relacionados añade la una relación has_many a la tabla
intermedia.
Quitate de la cabeza la relación que tienes ahora mismo, y piensa en una
tabla y la tabla de relaciones. Esa relación es una relación 1 a muchos,
por
lo que para el caso, en ambas tablas (o solo en una si lo necesitas),
añades
el has_many, y en la tabla intermedia el belongs_to.

Si ver muy bien tu caso, algo así:

class BudgetCategory < AR:Base
has_many :items, :through => BudgetCategoryItems
has_many :budget_category_items, :dependet => :destroy # Qué siempre
se
suele olvidar
end

class BudgetCategoryItems < AR:Base
belongs_to :budge_category
belongs_to :item
end

class Item < AR:Base
has_many :budget_category, :through => BudgeCategoryItems
has_many :budget_category_items, :dependent => :destroy
end

Y salvo que haya metido la pata en como especificar el througt, ahora ya
puedes acceder de manera normal.
@budget_category.budget_category_items.first(:conditions => {:item =>
@item})

Es lo primero que se me ocurre. Ahora mismo no se si hay alguna otra
forma
de hacerlo.

Un Saludo.


#3

Hola Guillermo,

es exactamente la relacion que tengo, ya que asi se generan las
relaciones
has_many :througth con un has_many de la tabla intermedia.

mi pregunta basicamente es como ingresar los datos de la tabla
intermedia (
budget_category_items) ya que tengo datos especificos que necesito para
asociar a los items.

el asunto es que cuando hago esto:

@budget_category.items << @item

la tabla intermedia se genera automaticamente, mi duda esta en como
insertar
datos a algunos campos especificos de la tabla intermedia en ese paso

¿es posible ? o tendria que hacer algo como:

@budget_category.items << @item
@budget_categories_items = BudgetCategoryItem.find(:first ,
:conditions=>[“budget_id?= AND item_id?=”, @budget , @item])
@budget_categories_items.
update_attributes(params[:item][:budget_categories_items])

gracias

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2009/3/19 Guillermo removed_email_address@domain.invalid


#4

2009/3/20 Miguel M. removed_email_address@domain.invalid:

mi pregunta basicamente es como ingresar los datos de la tabla intermedia
(budget_category_items) ya que tengo datos especificos que necesito para
asociar a los items.

el asunto es que cuando hago esto:

@budget_category.items << @item

la tabla intermedia se genera automaticamente, mi duda esta en como insertar
datos a algunos campos especificos de la tabla intermedia en ese paso

No es posible. Si necesitas inicializar mas columnas en la tabla
intermedia has de trabajar con ese modelo.


#5

2009/3/20 Miguel M. removed_email_address@domain.invalid:

mi pregunta basicamente es como ingresar los datos de la tabla intermedia
(budget_category_items) ya que tengo datos especificos que necesito para
asociar a los items.

el asunto es que cuando hago esto:

@budget_category.items << @item

la tabla intermedia se genera automaticamente, mi duda esta en como insertar
datos a algunos campos especificos de la tabla intermedia en ese paso

Yo creo que quieres algo como “Many-to-Many Relationships with Extra
Data” lo puedes encontrar en Google o en “Rails Recipes - Recipe 22”.


#6

gracias , lo investigaré

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2009/3/21 Francesc E. removed_email_address@domain.invalid