Пользовательская (модельная) иерархия, самоссылочное соединение - PullRequest
0 голосов
/ 13 сентября 2009

Я пытаюсь понять, как установить двухуровневые отношения с пользователем.

У фотографов есть клиенты. У клиентов есть один фотограф. Оба являются пользователями.

У меня есть модель пользователя, которая выглядит следующим образом:

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

И модель ассоциации, которая выглядит следующим образом:

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

Когда я заполняю его некоторыми данными и запускаю консоль, запуск user.clients.all или user.photographer просто дает мне пустой массив.

Что я делаю не так?

1 Ответ

2 голосов
/ 13 сентября 2009

Вы должны переключить foreign_keys:

  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
...