Rails получает массив идентификаторов, если у модели есть коллекция с идентификатором в ней

#ruby-on-rails #ruby #ruby-on-rails-4 #activerecord

#ruby-on-rails #ruby #ruby-on-rails-4 #activerecord

Вопрос:

Высокий уровень того, что я пытаюсь сделать. У меня есть House модель и House has_many Rooms . И дом, и комната имеют свойство id. Я пытаюсь получить массив идентификаторов домов, которые содержат комнаты с определенным идентификатором: данные: (rails 4.2.6)

 houses = [{
  id: 1,
  rooms: [{ id: 1}, {id: 2}, {id: 3}]
},{
  id: 2,
  rooms: [{id: 2}]
}]
  

псевдокод

 House.where(rooms: contain(id: 2))
  

это должно вернуть [1,2], потому что оба дома имеют идентификатор комнаты 2

 House.where(rooms: contain(id: 1))
  

это должно вернуть [1].

Ответ №1:

Попробуйте это:

 House.joins(:rooms).where(:rooms => {:id => 5}).pluck(:id)
  

Ответ №2:

Если все, что вас волнует, это id значения, которые вы можете использовать pluck :

 House.where(...).pluck(:id)
  

Комментарии:

1. внутри лямбды where, как вы ссылаетесь на коллекцию комнат текущего экземпляра House?

2. При вызове методов класса нет «текущего дома». Это конструктор запросов, а не метод экземпляра.