作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在has_many:through上有许多帖子和主题,但是我还没有发现任何内容专门涵盖我想做的事情。
我有一个用户模型和一个友谊模型。一个用户有许多关注他们的用户以及许多关注者。这是通常的Twitter模式。
对于给定的用户,我想设置Active Record关系,以返回跟随该用户且该用户是其关注者的实际用户。
这些是我设置的关系:
class User < ActiveRecord::Base
has_many :following, :class_name => 'User', :through => :friendships, :foreign_key => 'user_id'
has_many :followers, :class_name => 'User', :through => :friendships, :foreign_key => 'friend_id'
end
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :following, :class_name => 'User', :foreign_key => 'friend_id'
belongs_to :follower, :class_name => 'User', :foreign_key => 'user_id'
end
SELECT `users`.* FROM `users` INNER JOIN `friendships` ON `users`.id = `friendships`.friend_id WHERE ((`friendships`.user_id = 1))
SELECT `users`.* FROM `users` INNER JOIN `friendships` ON `users`.id = `friendships`.user_id WHERE ((`friendships`.friend_id = 1));
has_many :followers, :class_name => 'User', :finder_sql => 'SELECT `users`.* FROM `users` INNER JOIN `friendships` ON `users`.id = `friendships`.user_id WHERE ((`friendships`.friend_id = #{ id }))'
# FOLLOWING
has_many :friendships_to, :foreign_key => 'user_id', :class_name => 'Friendship'
has_many :following, :through => :friendships_to, :class_name => 'User'
# FOLLOWERS
has_many :friendships_from, :foreign_key => 'friend_id', :class_name => 'Friendship'
has_many :followers, :through => :friendships_from, :class_name => 'User'
has_many :following, :class_name => 'User', :through => :friendships, :foreign_key => 'user_id'
最佳答案
您需要确保ActiveRecord知道User#friends和跟随者的源关联是什么,并为ActiveRecord无法从关联名称推断出的关系指定类和foreign_key。
class Following < ActiveRecord::Base
belongs_to :user
belongs_to :followed, :class_name => 'User'
end
class User < ActiveRecord::Base
has_many :followings
has_many :friends, :through => :followings, :source => 'followed'
has_many :followeds, :class_name => 'Following', :foreign_key => 'followed_id'
has_many :followers, :through => :followeds, :source => :user
end
关于ruby-on-rails - Ruby on Rails has_many通过自引用跟随/从属关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762919/
在has_many:through上有许多帖子和主题,但是我还没有发现任何内容专门涵盖我想做的事情。 我有一个用户模型和一个友谊模型。一个用户有许多关注他们的用户以及许多关注者。这是通常的Twitte
我是一名优秀的程序员,十分优秀!