Hierarquia do usuário (modelo), junta auto-referencial
-
06-07-2019 - |
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?
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