Sistema de tickets multi-usuario

Hola a todos,
estoy desarrolando un sistema de tickets multi-usuario, para ello he
utilizado acts_as_authenticated para generar el modelo User.

La idea es que un usuario (empresa) se registre en la página y pueda
crearse todos sus agentes (tecnicos) que quiera. He utilizado herencia
para tener una mista tabla con Users y Agents:

create_table :users, :force => true do |t|
t.column :type, :string

type = User

t.column :time_zone, :string
t.column :subdomain, :string, :limit => 20

type = Agent

t.column :user_id, :integer
t.column :department_id, :integer

commont attributes

t.column :name, :string
t.column :login, :string
t.column :email, :string
t.column :crypted_password, :string, :limit => 40
t.column :salt, :string, :limit => 40
t.column :created_at, :datetime
t.column :updated_at, :datetime
t.column :remember_token, :string
t.column :remember_token_expires_at, :datetime
end

Ahora, cada usuario o agente puede introducir tickets (incidencias en la
DB)

create_table :tickets do |t|
t.column :created_by, :integer
t.column :subject, :string

end

El problema que tengo es:

  • Cuando un ‘User’ se valide, tiene que ver sus tickets + los de todos
    sus ‘Agents’
  • Cuando un ‘Agent’ se valide, tiene que ver los tickets de su ‘User’ +
    los suyos + los de otros ‘Agent’ que pertenezcan a su ‘User’

Yo pensé en algo como:

class Agent < User
belongs_to :user
has_many :tickets, :foreign_key => ‘created_by’
end

class User < ActiveRecord::Base
has_many :tickets, :foreign_key => ‘created_by’
has_many :tickets, :through => :agents
end

Pero esto no funciona, los Agentes solo ven sus tickets y el User ve los
de sus agentes, pero no los suyos.

¿Alguna idea?

Gracias.

On Dec 31, 2006, at 2:15 PM, Vicent wrote:

El problema que tengo es:

  • Cuando un ‘User’ se valide, tiene que ver sus tickets + los de todos
    sus ‘Agents’
  • Cuando un ‘Agent’ se valide, tiene que ver los tickets de su
    ‘User’ +
    los suyos + los de otros ‘Agent’ que pertenezcan a su ‘User’

Cual es la diferencia?

– fxn

Xavier N. wrote:

On Dec 31, 2006, at 2:15 PM, Vicent wrote:

El problema que tengo es:

  • Cuando un ‘User’ se valide, tiene que ver sus tickets + los de todos
    sus ‘Agents’
  • Cuando un ‘Agent’ se valide, tiene que ver los tickets de su
    ‘User’ +
    los suyos + los de otros ‘Agent’ que pertenezcan a su ‘User’

Cual es la diferencia?

– fxn

¿A que te refieres?

On Dec 31, 2006, at 2:50 PM, Vicent wrote:

Cual es la diferencia?

– fxn

¿A que te refieres?

Por la descripcion parece que ambos conjuntos de tickets son el
mismo. Te lo digo en codigo:

Parece que tienes dos tipos de relaciones, una es la persistente, que
es una has_many normal

class User < AR::Base
has_many :tickets, …
end

con los tickets que ese tipo ha creado y solo eso. La otra es una de
mas alto nivel que no se maneja con persistencia y que probablemente
sea de solo lectura (escrito sobre la marcha):

en User

def related_tickets
tickets + agents.map {|a| a.tickets}.flatten
end

en Agent

def related_tickets
user.related_tickets
end

– fxn