PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

ActiveRecord - wybierz pierwszy rekord z każdej grupy

Nie wiem, jak zadzwonić do most_recent_chat_received_from_connected_users , która jest metodą wystąpienia Twojej Conversation klasy, na instancji User bez błędu, ale dodałbym niestandardową wyszukiwarkę do modelu konwersacji:

class Conversation < ActiveRecord::Base
  # ...

  def self.most_recent_for(user_id)
    select('DISTINCT ON (sender_id) *').where(reciever_id: user_id).order("sender_id, created_at DESC")
  end

  # For MySQL you could have used:
  #
  # def self.most_recent_for(user_id)
  #   where(reciever_id: user_id).group("sender_id").order("created_at DESC")
  # end

  # ...
end

Teraz możesz uzyskać żądane rozmowy w kontrolerze za pomocą:

@conversations = Conversation.most_recent_for(current_user.id)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Parsowanie daty z różnymi strefami czasowymi

  2. Jak ustawić limit czasu połączenia w SQLAlchemy?

  3. Indeksowanie tabel w PostgreSQL w celu zwiększenia wydajności

  4. Całkowita liczba rekordów na tydzień

  5. znacznik czasu postgresql do wartości std::chrono