0

私は2つのレベルのユーザー関係を持つ方法を理解しようとしています。

写真家にはクライアントがいます。クライアントには1人の写真家がいます。どちらもユーザーです。

次のようなユーザーモデルがあります。

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を実行すると空の配列が表示されます。

私は何が間違っているのですか?

4

1 に答える 1

2

あなたは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
于 2009-09-13T08:20:09.803 に答える