Рельсы монгоидные критерии найти по ассоциации
Я пытаюсь найти запись связанным именем пользователя, которое включено в отношение 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))