Forum: Rails-ES insertar registros en la tabla intermedia de una relacion has_many :through

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.
Bf47b813b0de4867a015fd4b54ac2fb4?d=identicon&s=25 Miguel Michelson (samek)
on 2009-03-19 23:29
(Received via mailing list)
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
39086eb3d9a1437276d07c08ea0c3821?d=identicon&s=25 Guillermo (Guest)
on 2009-03-20 02:18
(Received via mailing list)
2009/3/19 Miguel Michelsongs <miguelmichelson@gmail.com>
>
> 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.
Bf47b813b0de4867a015fd4b54ac2fb4?d=identicon&s=25 Miguel Michelson (samek)
on 2009-03-20 03:34
(Received via mailing list)
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 <guillermo@cientifico.net>
7223c62b7310e164eb79c740188abbda?d=identicon&s=25 Xavier Noria (fxn)
on 2009-03-21 10:55
(Received via mailing list)
2009/3/20 Miguel Michelsongs <miguelmichelson@gmail.com>:

> 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.
F625b891618be8ec32547a07b3192bb0?d=identicon&s=25 Francesc Esplugas (fesplugas)
on 2009-03-21 11:32
(Received via mailing list)
> 2009/3/20 Miguel Michelsongs <miguelmichelson@gmail.com>:

> 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".
Bf47b813b0de4867a015fd4b54ac2fb4?d=identicon&s=25 Miguel Michelson (samek)
on 2009-03-21 20:40
(Received via mailing list)
gracias , lo investigaré


Atte.
Miguel Michelson Martinez
---------------------------------------
www.artenlinea.com


2009/3/21 Francesc Esplugas <francesc.esplugas@gmail.com>
This topic is locked and can not be replied to.