Rails - Nested включает в Active Records?

У меня есть список событий, которые я извлекаю. Я пытаюсь включить каждого пользователя, связанного с этим событием, и каждого профиля, связанного с каждым пользователем. Пользователи могут быть включены, но не их профили.

Как бы это сделать

Event.includes(:users [{profile:}])

Документы не кажутся ясными: http://guides.rubyonrails.org/active_record_querying.html

Ответ 1

Я считаю, что следующее должно работать на вас.

Event.includes(users: :profile)

Если вы хотите включить ассоциацию (мы будем называть ее C) уже включенной ассоциации (мы будем называть ее B), вы должны использовать синтаксис выше. Однако, если вы хотите включить D также, что также является ассоциацией B, то, когда вы будете использовать массив, как показано в примере в Rails Guide.

A.includes(bees: [:cees, :dees])

Вы можете продолжить вложение, например, (если вам действительно нужно). Скажем, что A также ассоциирован с Z и что C связано с E и F.

A.includes( { bees: [ { cees: [:ees, :effs] }, :dees] }, :zees)

И для хорошей забавы мы также скажем, что E связано с J и X, а D связано с Y.

A.includes( { bees: [ { cees: [ { ees: [:jays, :exes] }, :effs] }, { dees: :wise } ] }, :zees)

Ответ 2

Если кто-то делает блок respond_to для генерации вложенного json, вы можете сделать что-то вроде:

respond_to do |f|
  f.json do
    render json: event.to_json(include: {users: {include: :profile} }), status: :ok
  end
end

Ответ 3

Пожалуйста, обратитесь к решению Джо Кеннеди.

Вот более читаемый пример (для будущего меня).

includes(
  :product,
  :package, {
    campaign: [
      :external_records,
      { account: [:external_records] },
      { agency: [:external_records] },
      :owner,
      :partner,
    ]
  }
)