You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:36:03