通过非标准列协会?

时间:2013-05-20 12:57:13

标签: ruby-on-rails associations

我有一个Friends模型user_idfriend_id ...两者都是特定用户的ID。

我想要做的是这样的事情:

@relationship = Friend.find_by_user_id(current_user.id)
@relationship.friend.username

我可以基本上以friend_id列的方式将用户拉到@relationship.user.username列。

我如何设置我的关联来解决这个问题?

2 个答案:

答案 0 :(得分:0)

这不仅仅是一个多对多的情况。

我认为Many-to-many relationship with the same model in rails?

中有一个完美的解决方案

希望这有帮助!

答案 1 :(得分:0)

如果您的专栏未反映预期的惯例,请使用class_name

class Friendship < ActiveRecord::Base
  belongs_to :user
  belongs_to :friend, class_name: 'User'
end

请注意,我将模型名称修改为Friendship以更好地反映此模型的用法。此外,如果您将User模型修改为如下所示,则可以让自己更轻松:

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

  has_many :friendships_of, :class_name => 'Friendship', :foreign_key => :friend_id
  has_many :friends_of, :through => :friendships_of, :source => :user
end

现在查看所有用户的朋友:

current_user.friends.map(&:username)

看看谁有“朋友”用户:

current_user.friends_of.map(&:username)