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

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

2009/3/19 Miguel M. [email protected]

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.

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 [email protected]

2009/3/20 Miguel M. [email protected]:

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.

2009/3/20 Miguel M. [email protected]:

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”.

gracias , lo investigaré

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2009/3/21 Francesc E. [email protected]