Jedes Zeichen has_many Konversationen (durch:: Chats) und jeder Conversation has_many Characters (durch: Chats). Ein Charakter kann eine Konversation mit nur einem anderen Charakter (zwei Teilnehmer) und andere Konversationen mit demselben Charakter und anderen Charakteren (drei oder mehr Teilnehmer) haben.Rails active select Datensätze durch Zählung von has_many durch Beziehung
Ich versuche, eine Abfrage zu erstellen, die nur die zwei Teilnehmer Gespräch auswählt.
Im Folgenden finden Sie ein fehlenden FROM-Klausel Eingabefehler. Ich habe viele Permutationen ausprobiert und kann es nicht richtig machen. Jede Hilfe würde sehr geschätzt werden.
Charakter
has_many :chats, foreign_key: "character_id",
dependent: :destroy
has_many :conversations, through: :chats, source: :conversation
Conversation
has_many :chats, foreign_key: "conversation_id",
dependent: :destroy
has_many :characters, through: :chats, source: :character
def self.FindOneToOneConversation(sender, recipient)
@sender = Character.find_by(callsign: sender)
@recipient = Character.find_by(callsign: recipient)
@senderConversations = @sender.conversations
@senderAndRecipientConversation = @senderConversations.joins(:characters)
.where(characters: {id: @recipient.id})
.having("COUNT(character.id) < 3")
return @senderAndRecipientConversation.first # .first because @senderAndRecipientConversations is a collection
end
Logs:
PG :: UndefinedTable: ERROR: Fehlende FROM-Klausel Eintrag für die Tabelle "Zeichen" LINIE 1: ..._ " "Id "= $ 1 und" Zeichen-ID"= $ 2 mit COUNT (Charakter .... ^
: SELECT "". * FROM "Gespräche Gespräche" INNER JOIN "Chats" "chats_conversations_join" ON" chats_conversations_join "." conversation_id "=" Konversationen "." id "INNER JOIN" -Zeichen "ON" -Zeichen "." id "=" chats_conversations_join "." character_id "INNER JOIN" chattet auf "ON" -Konversationen "." id "=" chats "." conversation_id "WHERE" chattet "." character_id "= $ 1 UND" characters "." id "= $ 2 HAVING COUNT (character.id) < 3 ORDER BY" Konversationen "." id "ASC LIMIT 1 Abgeschlossen 500 Intern Serverfehler in 24ms (Active: 1,1 ms)
Active :: StatementInvalid (PG :: UndefinedTable: ERROR: miss inging FROM-Klausel Eintrag für Tabelle "Zeichen" LINE 1: ..._ ID "= $ 1 AND" Zeichen "." ID "= $ 2 HAVING COUNT (Zeichen ....
Ich hoffte, das würde funktionieren, aber es diesen Fehler gibt:
FROM-Klausel fehlender Eintrag für die Tabelle „Gespräche“
@senderAndRecipientConversation = Conversation.select('*, COUNT(chats.character_id)')
.from("(#{@senderConversations.to_sql}) AS sender_conversations")
.joins("
INNER JOIN chats
ON sender_conversations.id = chats.conversation_id
GROUP BY chats.conversation_id
HAVING COUNT(chats.character_id) < 3
")
Als Reaktion auf die erste Antwort ist die folgende fehlerhaft und ich kann nicht sehen, warum - er alle Gespräche findet Beteiligung der Empfänger, nicht nur das eins-zu-eins-Gespräch:
@senderAndRecipientConversation = @senderConversations.joins(:characters)
.where(characters: {id: @recipient.id})
.group('conversations.id')
.having("COUNT(characters.id) < 3")
können Sie uns zeigen den vollständigen Stack-Trace des Fehlers? – niceman