Rails ActiveRecord извлекает связанные данные с двумя ассоциациями has_many - PullRequest
0 голосов
/ 10 января 2019

Допустим, у вас есть модель Licence, которая has_many: :seats и модель Seat has_many: :customers.

Я хочу получить обратно объект ActiveRecord всех клиентов на Licence. Есть ли способ сделать это?

У меня есть решение licence.seats.includes(:customers).flat_map(&:customers), но это вернет объект Array, который не является тем, что я ищу.

Спасибо за вашу помощь!

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Используйте has_many через параметр:

class Licence
    has_many :seats
    has_many :customers, through: :seats
end

Теперь вы можете получить клиентов по

licence.customers
0 голосов
/ 10 января 2019

Вместо использования объединений / включений это может быть эффективно для больших записей.

class Licence
    has_many :seats

    def customers
      #customer belongs_to seat
      Customer.where(seat_id: seats.pluck(:id))
    end
end

Запрос -

licence.customers
0 голосов
/ 10 января 2019

joins выполняет работу:

Customer.joins(:seat).where(seats: { licence_id: licence.id })

Возвращает Relation, как вы хотите.

...