Rails不会返回所有HABTM对象

时间:2018-12-19 11:05:59

标签: ruby-on-rails

我为自己的地方和便利设施模型设置了HABTM:

class Place
  has_and_belongs_to_many :amenities

class Amenity
  has_and_belongs_to_many :places
  has_and_belongs_to_many :place_filters

我还有一个过滤器模型,管理员可以通过该模型来分配哪些便利设施,以便以后过滤位置:

Class PlaceFilter
  has_and_belongs_to_many :amenities

我有这个查询,可用于查找设施经过过滤的地方:

@filter = Filter.find(params[:id])
@places = Place.includes(:amenities).where('amenities.id': @filter.amenities.pluck(:id))

该查询正常运行,但是当我遍历各个地方时,即使该地方有10个便利设施,我对每个地方也只能获得一种便利(我正在过滤的地方)。我不明白,为什么?

2 个答案:

答案 0 :(得分:1)

您选择所有地点的行中的where子句会过滤掉所有其他便利设施。

通过reloading的关联,您应该在每个地方获取所有便利设施:

@places.each do |place|
  amenities = place.amenities.reload
  # ...
end

这将从数据库中执行一次全新读取(执行另一个查询)。

答案 1 :(得分:0)

如果您稍微修改Filter模型,我会说根本不需要此查询。

Filter模型中通过Place模型添加has_many

has_many :places, through: :amenities

然后像这样拨打电话:

@filter = Filter.find(params[:id])
@places = @filter.places