2013-02-24 7 views
7

In meiner Anwendung kann ein Benutzer viele Benutzer folgen und kann von vielen Benutzern verfolgt werden. Ich habe versucht, dies mit has_and_belongs_to_many VereinigungRails HABTM Self Join Fehler

class User < ActiveRecord::Base 
    has_and_belongs_to_many :followers, class_name: "User", foreign_key: "followee_id", join_table: "followees_followers" 
    has_and_belongs_to_many :followees, class_name: "User", foreign_key: "follower_id", join_table: "followees_followers" 
end 

auch zu modellieren, habe ich eine Migration für Join-Tabelle wie folgt:

class FolloweesFollowers < ActiveRecord::Migration 
    def up 
    create_table 'followees_followers', :id => false do |t| 
     t.column :followee_id, :integer 
     t.column :follower_id, :integer 
    end 
    end 

    def down 
    drop_table 'followees_followers' 
    end 
end 

wenn ich versuche, Anhänger eines Benutzers zuzugreifen (User.first.followers) es wirft einen Fehler:

SQLException: no such column: followees_followers.user_id: SELECT "users".* FROM "users" INNER JOIN "followees_followers" ON "users"."id" = "followees_followers"."user_id" WHERE "followees_followers"."followee_id" = 1 

ich verstehe nicht, warum es den Zugriff auf followees_followers.user_id. Fehle ich etwas?

Antwort

13

Die: foreign_key und :association_foreign_key Optionen sind nützlich, wenn ein many-to-many-Self-Join einrichten.

class User < ActiveRecord::Base 
    has_and_belongs_to_many :followers, class_name: "User", foreign_key: "followee_id", join_table: "followees_followers", association_foreign_key: "follower_id" 
    has_and_belongs_to_many :followees, class_name: "User", foreign_key: "follower_id", join_table: "followees_followers", association_foreign_key: "followee_id" 
end 
+1

Danke für den Link. Es funktioniert jetzt –

2

Es ist ziemlich klar, dass es versuchen würde, auf ein user_id-Feld zuzugreifen, da Sie auf die Beziehung von einer Instanz der User-Klasse zugreifen.

Try :association_foreign_key => "follower_id" in Ihrer followers Beziehung setzen und :association_foreign_key => "followee_id" in Ihrer followees Beziehung zu setzen.

+0

danke für deine antwort. Es funktionierte. –