sql >> Databáze >  >> RDS >> PostgreSQL

ActiveRecord - vyberte první záznam z každé skupiny

Nejsem si jistý, jak můžete zavolat most_recent_chat_received_from_connected_users , což je metoda instance vaší Conversation class na instanci User aniž bych dostal chybu, ale přidal bych do modelu konverzace vlastní vyhledávač:

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

Nyní můžete získat požadované konverzace ve vašem ovladači pomocí:

@conversations = Conversation.most_recent_for(current_user.id)



  1. mysql - vyhledávání mezi daty, kde se zobrazují všechna data

  2. Lepší správa paměti (haldy) na Solaris 10

  3. Aktualizovat a zvýšit více sloupců při duplikování

  4. Použít skupinu uvnitř poddotazu