Mam te modele w moich poręczy 6 Zastosowanie:


class Client < ApplicationRecord

  belongs_to :account

  has_many :people

end

class Person < ApplicationRecord

  belongs_to :client

end

class Payment < ApplicationRecord

  belongs_to :client

end

W moim SharesController staram się wygenerować całkowite płatności dla każdego client i pokaż je jako wykres kołowy:

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

Problem z tym jest to, że grupy client poprawnie. Jednak, zamiast pokazać każdego klienta name Chcę pokazać last_name pierwszego zagnieżdżonego person.

Jak można to zrobić?

Dzięki za wszelką pomoc.

0
Tintin81 3 sierpień 2020, 11:34

1 odpowiedź

Najlepsza odpowiedź

Powinieneś spróbować utworzyć połączenie między Client i Person, a następnie użyj uniq, aby uniknąć powielonych klientów.

Możesz spróbować czegoś takiego (nie jestem pewien, czy ten kod działa, ale po prostu sprawić, co mam na myśli)


@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}")
1
Tintin81 4 sierpień 2020, 20:36