如何通过HABTM关联根据输入team_id获取对应开发者手机号列表
问题原因
你之前的查询语句没有指定mobile字段所属的表,pluck(:mobile)默认会去teams表取字段,但teams表本身没有mobile字段,手机号存储在developers表中,所以返回空数组。
正确的ActiveRecord写法
你可以直接通过关联查询获取指定团队下所有开发者的手机号:
# 先校验团队是否存在,避免无效team_id查询 @team = Team.find_by(id: params[:team_id]) if @team @mob = @team.developers.pluck(:mobile) else # 处理团队不存在的逻辑,返回错误提示 end
如果你想用join写法,需要显式指定字段所属表:
@mob = Team.joins(:developers).where(id: params[:team_id]).pluck("developers.mobile")
对应原生SQL语句
SELECT developers.mobile FROM teams INNER JOIN developers_teams ON developers_teams.team_id = teams.id INNER JOIN developers ON developers.id = developers_teams.developer_id WHERE teams.id = 你传入的team_id
额外优化建议
你当前的teams表中已经通过HABTM关联developers,还额外存了序列化的dev_ids字段属于冗余存储,很容易出现数据不一致的情况,如果没有特殊需求建议后续删除这个字段,所有关联关系直接通过中间表developers_teams维护即可。
内容的提问来源于stack exchange,提问作者Lazlo
相关产品推荐
相关产品推荐

