2013-02-24 18 views
7

Nella mia applicazione un utente può seguire molti utenti e può essere seguito da molti utenti. Ho cercato di modellare questa associazione has_and_belongs_to_many usandoRails HABTM self join error

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 

Inoltre, ho creato una migrazione di join tabella come segue:

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 

quando provo ad accedere follower di un utente (User.first.followers) si genera un errore:

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 

non capisco perché è accede followees_followers.user_id. Mi sto perdendo qualcosa?

risposta

13

Le opzioni: foreign_key e :association_foreign_key sono utili quando si imposta un self-join many-to-many.

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

Grazie per il link. Sta lavorando adesso –

2

È abbastanza chiaro che tenterebbe di accedere a un campo user_id poiché si accede alla relazione da un'istanza della classe User.

Provare a impostare :association_foreign_key => "follower_id" nella relazione followers e impostare :association_foreign_key => "followee_id" nella relazione followees.

+0

grazie per la risposta. Ha funzionato. –

Problemi correlati