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

Rails中如何通过pluck获取城市关联的所有学校ID?

解决方法:获取城市下所有学校ID

这个问题的核心是你没有明确指定要获取的是schools表的id字段,当你调用pluck(:id)时,Rails默认会取当前查询链中主表(也就是listings表)的id,所以才会返回Listing的ID而不是学校的。

下面给你两种可行的解决方式:

方式一:直接指定schools.id字段

在pluck里明确写出要获取的是学校表的ID,这样就能精准拿到目标数据:

city.listings.joins(:schools).pluck('schools.id').uniq

这种方式不需要修改模型关联,直接在现有查询上调整即可生效。

方式二:通过through关联简化查询(更符合Rails风格)

你可以在City模型中添加一个间接关联,让City直接关联到Schools,这样后续查询会更简洁:

# app/models/city.rb
class City < ApplicationRecord
  has_many :listings
  has_many :schools, through: :listings, distinct: true # 添加这行,distinct自动去重
end

之后你就可以直接用更直观的方式获取学校ID:

city.schools.pluck(:id)

这里的distinct: true会让Rails自动在查询中加入DISTINCT关键字,避免同一个学校被多个Listing关联时出现重复ID,这样连.uniq都不需要额外调用了。

补充说明

如果你用的是较旧版本的Rails(比如Rails 4及以前),distinct: true需要换成uniq: true,效果是一致的。

内容的提问来源于stack exchange,提问作者tomb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:05:41