критерии рельсов - PullRequest
       16

критерии рельсов

12 голосов
/ 03 апреля 2012

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

28 голосов
/ 03 апреля 2012

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

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

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

user_ids = User.where(username: 'erebus').only(:_id).map(&:_id)
articles = Article.where(:user_id.in => user_ids)
14 голосов
/ 29 января 2015

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

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))
...