Rails activerecord находит родителя по заданному идентификатору дочерней модели, когда у родителя есть поле, являющееся массивом дочерних идентификаторов. - PullRequest
0 голосов
/ 21 мая 2019

помогите пожалуйста. У меня есть объект Activerecord, который называется Estate. Внутри Estate есть поле, которое представляет собой массив идентификаторов для другого объекта Activerecord под названием House. Так это выглядит примерно так; Estate ... houses: [an_array_of_house_ids] пока House id:value .... Дом - это его собственная вещь с НЕТ АССОЦИАЦИИ в поместье. Теперь, если у меня есть произвольный house_id, как я могу запросить activerecord, чтобы получить объект недвижимости, к которому принадлежит этот дом, или если он не принадлежит ни одному объекту недвижимости в моей базе данных?

Например, допустим, БД выглядит так;

Estate
_____________________________________________
| estate_id   |    houses      |other_fileds|
---------------------------------------------
|       1     | [1, 2, 3, 4]   |      .     |
---------------------------------------------
|       2     | [5, 15, 3, 4] |      .     |
---------------------------------------------
|       3     | [6, 7, 8, 4] |      .     |
---------------------------------------------

# The houses fields has arrays of house_ids from the table below

House
_____________________________________________
| house_id    | other_fileds|
---------------------------------------------
|       1     |       .     |
---------------------------------------------
|       2     |       .     |
---------------------------------------------
|       3     |       .     |
---------------------------------------------

Учитывая, что у меня есть house_id, скажем, house_id = 3, какой будет самый оптимальный способ получить estate_id для этого дома?

Ответы [ 2 ]

0 голосов
/ 21 мая 2019
Estate.where("?= ANY(houses)", house_id).ids

Примечание: где house_id может быть критерием поиска

0 голосов
/ 21 мая 2019

В классе House вы указываете belongs_to связь с лямбда, как это

class House < ApplicationRecord
...
belongs_to :estate, ->(house) { Estate.where("?=ANY(houses)", house.id).first }
...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...