Ich habe eine HABTM-Assoziation zwischen zwei Modellen, Benutzer und Konversation. Ich möchte in der Lage sein, die Konversationen des angemeldeten Benutzers abzufragen (current_user.conversations
), die ID eines anderen Benutzers zu übergeben und eine von beiden Benutzern freigegebene Konversation zurückgeben, falls eine existiert. (ein weiterer Vorteil wäre die Abfrage erstellen haben, wenn man nicht existiert.)Modell nach Attribut der HABTM-Assoziation abfragen
Die Verbände arbeiten gut, so kann ich die dazugehörigen Objekte durch Instanzvariablen wie @user.conversations
und @conversation.users
zugreifen, so konnte ich den langen Weg und Schleife durch jedes Konversationsobjekt und suchen Sie die Benutzerverbände in jedem von ihnen ... Aber es muss eine effiziente Möglichkeit, diese Abfrage zu konstruieren. Was ich gerne tun könnte, ist etwas wie current_user.conversations.where(conversation.users.exists?(id: @user_id))
oder etwas wie Conversation.find(users: {id: @user_id AND current_user.id})
.
Ich kann mir vorstellen, dass es eine offensichtliche Antwort darauf gibt, und ich habe hier nach ähnlichen Fragen gesucht, aber keine gefunden. Nachdem ich die Rails-API-Dokumente durchgelesen habe, stelle ich mir vor, dass die Lösung, nach der ich suche, in irgendeiner Weise mit .includes()
verbunden ist, aber ich kann nicht funktionieren.
Irgendwelche Ratschläge? Vielen Dank.
Können Sie ein hohes Maß Schnipsel der Modellbeziehungen zwischen den Nutzern und Gespräche posten? Hat die Konversation für jeden Benutzer einen Fremdschlüssel (z. B. "sender_id", "recipient_id")? –