2009/6/26 Diego Caliri <[email protected]>

> Buenas, tiro un tema por si alguien ha tenido una situacion similar para
> resolver. Estoy en la disyuntiva de usar *has_and_belongs_to_many* o *has_many
> :thorugh
>
> *Primero explico un poco el dominio del problema:
>
> Por una parte tenemos User y por otra Structure. La Structure intenta
> reflejar una determinada forma de organizar los usuarios. (esto para
> relacionarlo con remuneraciones, comisiones, etc) por tanto una Structure
> tiene que tener N Users relacionados. A su vez cada User puede estar en una
> o varias Structure. El problema es que dentro de cada Structure cada User
> puede jugar un papel u otro por tanto esa informacion la tengo que guardar
> en la join table.
>
> En un principio habia creado una table structures_users y habia
> implementado *has_and_belongs_to_many *pero después leyendo *The Rails Way
> *me di cuenta que no es la mejor forma de hacerlo por distintas razones
> que me van a traer problemas mas adelante. El libro recomienda usar para
> estos casos *has_many :through* y explica como hacer las relaciones pero
> no da ningun ejemplo ni dice nada acerca de donde (en que parte del codigo)
> ni como asignar los atributos en la join table cuando creamos una instancia
> del objeto relacionado.
>

si entendi bien tu join table es roles, si queres modificar atributos de
esta tabla podes hacer

rol = usuario.roles[0] #elegis el primer rol
rol.mi_atributo = valor
rol.save

si queres las estructuras de ese usuario haces

usuario.structures

para asignarle atributos a tu join table durante la creacion de la instancia
podes utilizar los callbacks dentro de tu modelo por ejemplo before_save o
after_save dependiento de tus necesidades

class User < ActiveRecord::Base  has_many :roles
  has_many :structures, :through => :roles

protected
def after_save
   #agrego un rol por defecto
   rol = Rol.new
   rol.atributo = valor
   rol.save
   roles << rol
   ........
end
end

Saludos


> Paso unos paste de la parte de los 3 modelos donde estan las relaciones:
>
> http://pastebin.com/m2f9700b5
>
> Ahora paso el StructureController (y tambien una parte del
> ApplicationController que esta referenciada en el controller anterior):
>
> http://pastebin.com/m6e9ff46b
>
> Saludos
>
> Diego S. Caliri
>
>
>
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
>


-- 
Lic. José Alfredo Ramirez
IPCorp Desarrollo de Software & Soluciones IT
Quintana 2228  3ro. C | Corrientes | Argentina
http://www.ipcorp.com.ar
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a