#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. При вызове методов класса нет «текущего дома». Это конструктор запросов, а не метод экземпляра.