0

我有以下关联:

class User < ActiveRecord::Base
  has_many :followers, class_name: "Follow"
  has_many :following, class_name: "Follow", foreign_key: "follower_id"

  has_many :posts
end

class Follow < ActiveRecord::Base
  belongs_to :user
  belongs_to :follower, class_name: "User", foreign_key: "follower_id"
end

我希望能够做类似的事情:

current_user.followers

并取回一个 User 对象,而不是 Follow 对象。我为这样的用户做了类似的事情:

class User < ActiveRecord::Base
  has_many :post_favorites, class_name: "Favorite"
  has_many :favorites, class_name: "Post", through: :post_favorites, source: :post
end

然后我将收藏夹的belongs_to 关系添加到:user 和:post。这很好用。但是,在我试图与追随者一起完成的工作中,它没有双向关系(我猜这是我描述它的最佳方式),所以我无法使用相同的方法让它工作。

有没有更聪明的方法来解决这个问题?我说的是一种类似于 Twitter 的“关注/关注者”计划,用户可以关注某人并让其他人关注他们。

我的 Follow 模型只有一个 user_id 和一个 follower_id 字段。我想如果我做类似的事情它会起作用:

current_user.followers.each {|follower| follower.user}

但我希望最终能够做类似的事情:

current_user.followers.posts
4

1 回答 1

0

中间创建一个join表,通过它join到自己的user表。

class User
  has_many :follows
  has_many :followers, :through => :follows, :class_name => "User"

end

class Follow
  belongs_to :user
end

create_table :follows do |f|
  f.references :user
  f.integer :follower_id
end

类似的东西?

于 2013-09-16T21:50:25.303 回答