Допустим, у меня есть модель User
, и каждый пользователь имеет ассоциацию под названием user_logins
, которая создается при каждом входе в систему, сохраняя информацию о своем логине.Лучший способ найти пользователей с определенными ассоциациями
Что мне нужно сделать, это найти всех пользователей, у которых есть 5 записей user_login, где сегодня была создана пятая запись.
Что-то вроде этого:
users = User.all.where(user_logins_count == 5, user_login.last.created_at == today)
user_logins_count
является кэш счетчик я настроил.
Конечно, этот код является жестоким, но, надеюсь, он подробно остановится на том, чего я пытаюсь достичь.
PG ОШИБКА
rake aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "last
"
LINE 1: ...n_logins_count" = 5 GROUP BY humans.id HAVING MAX(human_logi...
^
Новый код:
humans = user.humans.joins(:human_logins).where(human_logins_count: 5)
.group('humans.id')
.having('MAX(human_logins.created_at) >= ?', Date.today)
Спасибо fivedigit, будут ли объединения и группы работать в postgres? как я знаю, это может быть несколько отрывочно с ними звонки –
Я действительно тестировал это в postgres, поэтому он должен работать как шарм! ;) – fivedigit
Удивительный, спасибо! –