Исключить записи активных записей на основе другого атрибута активной записи - PullRequest
1 голос
/ 26 сентября 2019

(смените заголовок на более подходящий)

Я использую Ruby on Rails и у меня есть два набора моделей:

  • Страница
  • Магазин

  • Страница has_many Магазины.

  • У магазина есть атрибут status_nbr, который варьируется от 1 до 5.

Например, на странице № 1 может быть 5 магазинов, в двух из которых status_nbr = 1 и три из них имеют status_nbr = 3.

Я хочу выполнить запрос, чтобы найти все страницы, где есть нет магазина, который имеет status_nbr = 1. Другими словами, страницы, которыене хватает магазинов с status_nbr = 1. Как мне это сделать?Я предполагаю, что это можно сделать с помощью некоторого умного соединения?

А пока я запускаю цикл:

ok_list = []
Page.all.each do |page|
  ok_list << page.id unless page.stores.where(:status_nbr => 1).blank?
end
@pages = Page.where(:id => ok)

, что очень плохо / медленное программирование.

Редактировать:Это не повторяющийся вопрос упомянутого.Моя модель зависит от другой модели и атрибута этой другой модели.

1 Ответ

0 голосов
/ 26 сентября 2019

Это должно работать.

Page.joins(:store).where.not(store: { status_nbr: 1}).uniq

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