1

個人の Facebook の友達をデータベースに保存しようとしています。Facebook ユーザーをテーブルに保存し、その友情を別のテーブルに保存したいと考えています。フレンドシップには、フレンドシップを要求した FacebookUser の整数とフレンドの整数が含まれます。どちらも facebook_users テーブルへの外部キーです。ただし、ユーザーのFacebookの友達を友達にリンクしようとすると、このメッセージが表示され続けます。

エラー

ActiveRecord::HasManyThroughSourceAssociationNotFoundError: Could not find the source association(s) :friend or :friends in model Friendship. Try 'has_many :friends, :through => :friendships, :source 
=> <name>'. Is it one of :FacebookUser or :FacebookFriend?

友情.rb

class Friendship < ActiveRecord::Base
  attr_accessible :facebook_user_id, :facebook_friend_id

  belongs_to :FacebookUser
  belongs_to :FacebookFriend, :class_name => :FacebookUser
end

facebook_user.rb

class FacebookUser < ActiveRecord::Base
  attr_accessible :first_name, :gender, :last_name

  has_many :friendships, :foreign_key => :facebook_user_id
  has_many :friends, :through => :friendships, :source => :FacebookUser
end

スキーマ

create_table "facebook_users", :force => true do |t|
  t.string   "first_name"
  t.string   "last_name"
  t.string   "gender"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

create_table "friendships", :force => true do |t|
  t.integer "facebook_user_id"
  t.integer "facebook_friend_id"
end
4

1 に答える 1

4

Rails が使用する規則は、クラス名と外部キーによって定義された関連付けを使用することです。上記のようにテーブルを設定した場合は、モデルを次のように変更する必要があります。

class Friendship < ActiveRecord::Base
  attr_accessible :facebook_user_id, :facebook_friend_id

  belongs_to :facebook_user # implies a foreign key of facebook_user_id and class of FacebookUser
  belongs_to :facebook_friend, class_name: 'FacebookUser' #implies a foreign key of facebook_friend_id
end

class FacebookUser < ActiveRecord::Base
  attr_accessible :first_name, :gender, :last_name

  has_many :friendships
  has_many :friends, :through => :friendships, :source => :facebook_friend
end
于 2013-02-21T05:04:33.503 に答える