Критерии рельса

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