Rails 6中如何获取User多对多好友关联的created_at字段?
实现方案
方案1:直接查询Friendship关联(推荐)
直接查询当前用户的friendships关联,同时预加载好友数据避免N+1查询,天然持有friendships表的所有字段(含关系创建时间created_at):
# 控制器代码 @friendships = current_user.friendships.includes(:friend)
遍历使用示例:
<% @friendships.each do |friendship| %> <p>好友账号:<%= friendship.friend.email %></p> <p>好友关系建立时间:<%= friendship.created_at.strftime("%Y-%m-%d %H:%M") %></p> <% end %>
方案2:直接查询好友列表,挂载关系创建时间
如果希望直接拿到User类型的好友集合,可通过关联查询自定义查询字段,将关系创建时间作为临时字段挂载到好友实例上:
# 控制器代码 @friends = current_user.friends .select("users.*, friendships.created_at AS friendship_created_at")
使用示例:
# 获取首个好友的关系建立时间 @friends.first.friendship_created_at
可选优化
如果需要频繁使用该字段,可以直接修改关联配置,后续调用current_user.friends时会自动携带该字段:
class User < ApplicationRecord # 原有其他关联省略 has_many :friends, -> { select("users.*, friendships.created_at as friendship_created_at") }, through: :friendships end
内容的提问来源于stack exchange,提问作者Huzaifa Malik
相关产品推荐
相关产品推荐

