Rails HABTM自连接错误

时间:2013-02-24 20:01:26

标签: ruby-on-rails-3 has-and-belongs-to-many

在我的应用程序中,用户可以关注许多用户,许多用户都可以关注。 我尝试使用has_and_belongs_to_many关联

对此进行建模
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

另外,我为join表创建了一个迁移,如下所示:

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

当我尝试访问用户的关注者(User.first.followers)时,它会抛出错误:

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

我不明白为什么要访问followees_followers.user_id。我错过了什么吗?

2 个答案:

答案 0 :(得分:13)

设置多对多自联接时,:foreign_key和:association_foreign_key选项非常有用。

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 :(得分:2)

很明显,它会尝试访问user_id字段,因为您正在从User类的实例访问该关系。

尝试在:association_foreign_key => "follower_id"关系中设置followers并在:association_foreign_key => "followee_id"关系中设置followees