【Rails学习笔记】用户关注功能(一)


这里是整本书最难的部分,拆成三个部分。


关系模型的实现:

这里的难点在于如何实现用户之间相互关注的数据模型,当一个用户A关注B或者取消关注B时发生了什么? 发生的是relation的创建与销毁。

因此这里的关系模型用relationship来实现,里面两项,followed_id和follower_id 分别表示被关注的ID和关注者的ID。

user与relationship是一对多的关系,不过这里的一对多有两个,一个是对应多个followed_id,另一个是对应多个follower_id,所以user有两个外键,分别是followed_id,follower_id。

同样,relationship也以两种方式从属于user,一个是following(也就是前面的followed),一个是folower,这两个都是user,但是取了别名。这两者均以user的id为外键。

对relationship本身也要建立索引。


贴出相应的代码如下:

User模型中如下:

  1. <pre name="code" class="ruby">has_many :relationships, foreign_key: "follower_id", dependent: :destroy  
  2. has_many :followed_users, through: :relationships, source: :followed  
  3. has_many :reverse_relationships, foreign_key: "followed_id",  
  4.                 class_name: "Relationship",  
  5.                 dependent: :destroy  
  6. has_many :followers, through: :reverse_relationships,source: :follower</pre><br><br>  


relationship模型中的代码如下:

  1. class Relationship < ActiveRecord::Base  
  2.     belongs_to :follower, class_name: "User"  
  3.     belongs_to :followed, class_name: "User"  
  4.     validates :follower_id, presence: true  
  5.     validates :followed_id, presence: true  
  6. end  



这里需要注意的是reverse_relationships这张表,他实际上并不存在,因为relationships是个对称的表,我把follower_id做主键,能够查询一个用户关注了那些人,反过来我把followed_id做主键,可以查询该用户有多少粉丝。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值