J'ai deux modèles:Est-ce possible en une seule requête?
class User
end
class Message
belongs_to :sender, :class_name=> 'User'
belongs_to :recipient, :class_name=> 'User'
end
Je veux aller chercher tous les copains d'un utilisateur donné commandés par la plus récente date de message de ce qui apparaît dans la conversation entre l'utilisateur donné et son copain et, si possible même requête, pour récupérer le numéro du message dans leur conversation.
Maintenant, je suis coincé à ceci:
Messages.all(:joins => :sender,
:conditions => ['sender_id = ? OR recipient_id = ?', some_user.id, some_user.id],
:select => 'users.*, sender_id, recipient_id, MAX(messages.created_at) as last_created, COUNT(messages.id) as messages_count',
:group => 'messages.sender_id, messages.recipient_id',
:order => 'last_created DESC'
Cette requête produit cette sortie:
a)
users.* | sender_id | recipient_id | MAX(last_created) | messages_count
user1 | 1 | 2 | bla | bla
user1 | 1 | 3 | bla | bla
user1 | 1 | 4 | bla | bla
Parce que les modèles joints par messages.sender_id = user.id
je ne user1 enregistrements récupérés mais j'ai besoin user2, user3 et user4 enregistrements dans cette situation particulière A lorsque user1 a seulement envoyer des messages à ses copains.
b)
users.* | sender_id | recipient_id | MAX(last_created) | messages_count
user2 | 2 | 1 | bla | bla
user3 | 3 | 1 | bla | bla
user4 | 4 | 1 | bla | bla
Dans la situation B, sinon, je dois ce que je veux avoir - les trois copains commandés par la date la plus récente de messages ce qui apparaît dans la conversation entre l'utilisateur donné et son copain.
c)
users.* | sender_id | recipient_id | MAX(last_created) | messages_count
user1 | 1 | 2 | bla | bla
user3 | 3 | 1 | bla | bla
user4 | 4 | 1 | bla | bla
Situation C. user2 comme ami de user1 est manquant motif :joins => :sender
. Sinon, si :joins => :recipient
manque user3 et user4. C'est le craqueur. Peu importe comment nous rejoignons les modèles. Comment résoudre cette situation dans une requête?
juste une chose: c'est ': class_name'. –
Merci, faute d'orthographe – yukas