Rails не возвращает все объекты HABTM - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть 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 голосов
/ 19 декабря 2018

Я бы сказал, что вам вообще не нужен этот запрос, если вы немного измените модель Filter.

Добавьте has_many через Filter модель для Place

has_many :places, through: :amenities

Тогда звоните как:

@filter = Filter.find(params[:id])
@places = @filter.places
0 голосов
/ 19 декабря 2018

Пункт where в строке, где вы выбираете все места, отфильтровывает все остальные удобства.

Путем перезагрузки ассоциации, которую вы должны получить, возвращая все удобства на место:

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

Будет выполнено новое чтение из базы данных (выполнен один дополнительный запрос).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...