的habtm外键

问题描述:

我试图用的habtm的关系,但我需要使用uid作为外键的habtm外键

SELECT "friends".* FROM "friends" INNER JOIN "friendships" ON "friends"."uid" = "friendships"."uid" WHERE "friendships"."user_id" = 4 
#User 
has_and_belongs_to_many :friends, :class_name => "Friend", :join_table => "friendships", :association_foreign_key => "uid" 
#Friend 
has_and_belongs_to_many :users, :class_name => "User", :join_table => "friendships", :foreign_key => "uid" 

SELECT "friends".* FROM "friends" INNER JOIN "friendships" ON "friends"."id" = "friendships"."uid" WHERE "friendships"."user_id" = 4 

Rails Style Guide

体型的has_many:通过对has_and_belongs_to_many。使用的has_many:通过允许在连接模型

在你的情况的附加属性和验证:

class Friendship < ActiveRecord::Base 
    belongs_to :friend 
    belongs_to :user 
    # the validates are not mandatory but with it you make sure this model is always a link between a Friend and a User 
    validates :user_id, :presence => true 
    validates :uid, :presence => true # the Foreign Key is 'uid' instead of 'friend_id' 
end 

class User < ActiveRecord::Base 
    has_many :friends, :through => :friendships 
end 

class Friend < ActiveRecord::Base 
    has_many :users, :through => :friendships, :foreign_key => "uid" 
end