Рельсы монгоидные критерии найти по ассоциации

Я пытаюсь найти запись связанным именем пользователя, которое включено в отношение belongs_to, но оно не работает.

Статьи принадлежат Пользователям У пользователей много статей

Article.where(user_id: someid) работает отлично, но я бы хотел использовать имя пользователя в качестве ссылки, которое хранится в таблице Users.

Article.includes(:user).where(:username => "erebus")
Article.includes(:user).where("user.username" => "erebus")

У меня также есть identity_map_enabled: true

Article.includes(:user).inclusions возвращает сведения о соотношении

Не работает, что я не понимаю?

Ответ 1

Вы должны помнить, что в mongodb нет объединений. В реляционных dbs includes формирует запрос соединения, и вы можете использовать столбцы из обеих таблиц запроса. Однако из-за отсутствия объединений в монгодб такое же невозможно.

В mongoid includes просто сохраняет кучу db-вызовов. Он извлекает и сохраняет связанные записи в карте идентификации для быстрого извлечения, но при запросе один запрос может иметь дело только с одной коллекцией.

Если вам нужны статьи, основанные на именах пользователей, я бы предложил следующую работу:

user_ids = User.where(username: 'erebus').only(:_id).map(&:_id)
articles = Article.where(:user_id.in => user_ids)

Ответ 2

Вы можете сделать это немного короче, чем предлагал рубик:

user_ids = User.where(username: 'erebus').pluck(:id)
articles = Article.where(:user_id.in => user_ids)

Или один вкладыш:

articles = Article.where(:user_id.in => User.where(username: 'erebus').pluck(:id))