Pergunta

Estou tentando descobrir como ter um relacionamento de dois níveis.

Fotógrafos têm clientes. Os clientes têm um fotógrafo. Ambos são usuários.

Eu tenho um modelo de usuário que se parece com o seguinte:

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

E um modelo de associação que se parece:

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

Quando o preenchi com alguns dados e inicio o console, executando o user.clients.all ou user.photografher apenas me dá uma matriz vazia.

O que estou fazendo errado?

Foi útil?

Solução

Você deve mudar os estrangeiros:

  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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top