我为自己的地方和便利设施模型设置了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个便利设施,我对每个地方也只能获得一种便利(我正在过滤的地方)。我不明白,为什么?
答案 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