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.
Miguel M. (Guest)
on 2009-03-20 00: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
Guillermo (Guest)
on 2009-03-20 03:18
(Received via mailing list)
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.
Miguel M. (Guest)
on 2009-03-20 04: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 <removed_email_address@domain.invalid>
Xavier N. (Guest)
on 2009-03-21 11:55
(Received via mailing list)
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.
Francesc E. (Guest)
on 2009-03-21 12:32
(Received via mailing list)
> 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".
Miguel M. (Guest)
on 2009-03-21 21:40
(Received via mailing list)
gracias , lo investigaré


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


2009/3/21 Francesc E. <removed_email_address@domain.invalid>
This topic is locked and can not be replied to.