sql >> Databasteknik >  >> RDS >> PostgreSQL

ActiveRecord - välj första posten från varje grupp

Jag är inte säker på hur du kan ringa most_recent_chat_received_from_connected_users , vilket är en instansmetod för din Conversation klass, på en instans av User utan att få ett felmeddelande, men jag skulle lägga till en anpassad hitta till konversationsmodellen:

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

Nu kan du få önskade konversationer i din handkontroll med:

@conversations = Conversation.most_recent_for(current_user.id)



  1. Ta bort dubbletter i objektlistan med Python

  2. Kombinera INSERT-satser i en datamodifierande CTE med ett CASE-uttryck

  3. Varför är '2'> '10'?

  4. Ingenting visas efter att jag har laddat sidan