Критерии рельса
Я пытаюсь найти запись по связанному имени пользователя, которое включено в отношение own_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
возвращает детали отношения
Не работает, что я не понимаю?
2 ответа
Вы должны иметь в виду, что в mongodb нет соединений. В реляционных БД, includes
формирует запрос соединения, и вы можете использовать столбцы из обеих таблиц в запросе. Однако из-за отсутствия соединений в mongodb, то же самое невозможно.
В монгоиде includes
просто сохраняет кучу звонков в БД. Он извлекает и сохраняет связанные записи в карте идентификаторов для быстрого поиска, но все же при выполнении запросов один запрос может иметь дело только с одной коллекцией.
Если вам нужны статьи, основанные на именах пользователей, я бы предложил следующие варианты:
user_ids = User.where(username: 'erebus').only(:_id).map(&:_id)
articles = Article.where(:user_id.in => user_ids)
Вы можете сделать это немного короче из того, что предложил рубин:
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))