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
相关产品推荐
相关产品推荐

