Pregunta

Estoy tratando de descubrir cómo tener una relación de usuario de dos niveles.

Los fotógrafos tienen clientes. Los clientes tienen un fotógrafo. Ambos son usuarios.

Tengo un modelo de usuario que se ve así:

class User < ActiveRecord::Base
  #authlogic

  has_many :client_associations, 
    :foreign_key => 'client_id', 
    :class_name => 'Association', 
    :dependent => :destroy

  has_many :clients, :through => :client_associations

  has_one :photographer_association, 
    :foreign_key => 'photographer_id', 
    :class_name => 'Association', 
    :dependent => :destroy

  has_one :photographer, :through => :photographer_association

end

Y un modelo de Asociación que se ve así:

create_table "associations", :id => false, :force => true do |t|
    t.integer "photographer_id"
    t.integer "client_id"
end

class Association < ActiveRecord::Base
  belongs_to :client, :class_name => 'User'
  belongs_to :photographer, :class_name => 'User'
end

Cuando lo lleno con algunos datos y enciendo la consola, ejecutar user.clients.all o user.photographer solo me da una matriz vacía.

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Debe cambiar las teclas_extranjeras:

  has_many :client_associations, 
    :foreign_key => 'photographer_id', 
    :class_name => 'Association', 
    :dependent => :destroy

  has_many :clients, :through => :client_associations

  has_one :photographer_association, 
    :foreign_key => 'client_id', 
    :class_name => 'Association', 
    :dependent => :destroy

  has_one :photographer, :through => :photographer_association
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top