Как группировать по атрибуту, но отображать значение вложенного атрибута? - PullRequest
0 голосов
/ 03 августа 2020

У меня в приложении Rails 6 есть следующие модели:

class Client < ApplicationRecord

  belongs_to :account

  has_many :people

end
class Person < ApplicationRecord

  belongs_to :client

end
class Payment < ApplicationRecord

  belongs_to :client

end

В моем SharesController я пытаюсь сгенерировать общие платежи для каждого client и показать их как диаграмму ap ie:

class SharesController < ApplicationController

  def index

        @clients = current_account.clients.joins(:payments)
                                          .where(:payments => {:date => @range, :currency => @currency})
                                          .order("sum_payments_#{@part} DESC")
                                          .group("clients.id", "clients.name")
                                          .having("sum_payments_#{@part} > 0")
                                          .sum("payments.#{@part}")
      end

end

Проблема с этим в том, что он группируется по client правильно. Однако вместо того, чтобы показывать name каждого клиента, я хочу показать last_name первого вложенного person каждого клиента.

Как это можно сделать?

Спасибо за любую помощь.

1 Ответ

1 голос
/ 03 августа 2020

Вы должны попытаться создать соединение между Client и Person, а затем использовать uniq, чтобы избежать дублирования клиентов.

Вы можете попробовать что-то вроде этого (я не уверен, что этот код работает, но чтобы было понятнее, что я имею в виду)


@clients = current_account.clients.joins(:payments, :people)
                   .where(:payments => {:date => @range, :currency => @currency})
                   .order("sum_payments_#{@part} DESC")
                   .group("clients.id", "people.last_name")
                   .having("sum_payments_#{@part} > 0")
                   .sum("payments.#{@part}")
...