0

Ich versuche, diese Abfrage zu schreiben:Rails: PG :: Syntaxerror: Fehler: Syntaxfehler bei oder in der Nähe von ":"

@myquery = Event.where("reservations.map(&:first)= ?", current_user.id) 

aber ich bekomme diese Fehlermeldung:

ActionView::Template::Error (PG::SyntaxError: ERROR: syntax error at or near ":" 
LINE 1: ...ECT "trips".* FROM "events" WHERE (reservations.map(&:first)= 1... 
                   ^

Die Ziel dieser Abfrage ist es, die Benutzer-IDs im ersten Element eines Arrays von Arrays zu finden: [["2", "1"], ["4", "1"]] wobei 2, 4 Benutzer-IDs sind. Ich habe versucht verschiedene Lösungen, aber immer noch dieses Problem!

+0

Möchten Sie bestimmte Datensätze aus der Tabelle 'events' abrufen? – dnsh

+0

@dnsh Ja! Die Datensätze, die current_user.id enthält, werden als erstes Element der Unterarrays des Reservierungsarrays gefunden. Zum Beispiel, wenn gewünscht ist 1, die Datensätze, die ["1", "..."] in Reservierungen wie Reservierungen = [["2", "3"], ["1", "4"]] –

+0

@AndreyDeineko Ich glaube nicht! Event ist eine Tabelle und ich benutze ähnliche Abfragen, aber nicht für ein Array von Arrays! –

Antwort

0

Ein wenig verwirrt, aber ich vermute, Sie versuchen, eine viele-zu-viele-Beziehung zwischen Users und Events (das heißt ein User hat viele Events und ein Event viele hat Users) zu erstellen.

Wenn ja, möchten Sie dies NICHT tun, indem Sie alle user_ids im Modell Event speichern und umgekehrt. Was Sie wollen, ist eine Join-Tabelle zu erstellen, die die IDs für jeden

#database table 
create_table "user_events", force: :cascade do |t| 
    t.integer "user_id" 
    t.integer "event_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

#join table 
class UserEvents < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :event 
end 

#user 
class User < ActiveRecored::Base 
    has_many :user_events, dependent: :destroy 
    has_many :events, through: :user_events 
end 

#event 
class Event < ActiveRecord::Base 
    has_many :user_events, dependent: :destroy 
    has_many :users, through: :user_events 
end 

mit dieser Struktur Ihre Anwendung, die Sie erzählen gilt, dass Users und Events durch UserEvents bezogen und haben Zugang zu allerlei nützlichen Keyword.

Zum Beispiel könnten Sie

Event.includes(:users).all.map {|event| event.user.first.id} 

tun, die sich von jedem Ereignis alle die ID des ersten Benutzers zurück, das ist, was ich glaube, Sie erreichen wollen.

+0

Es ist nicht eine viel zu viele Beziehung. Das Problem ist, dass ich nicht weiß, wie man mit einem Array von Arrays arbeitet und sein erstes Element sucht. Um mehr zu erfahren, sehen Sie bitte eine andere Frage von mir, die ungelöst geblieben ist! http://stackoverflow.com/questions/40614678/rails-how-to-use-scope-to-find-an-element-in-array-of-arrays –

+0

@AboozarRajabi wenn das Array von Arrays in der Datenbank gespeichert ist Sie müssen es in den Speicher laden, um Ruby-Code darauf ausführen zu können. Funktionen wie 'map' sind keine gültigen SQL. Kann ich fragen, warum Sie ein Array von Arrays im Ereignismodell speichern? – SomeSchmo

+0

@AboozarRajabi Ich denke, Sie versuchen, eine Viele-zu-Viele-Beziehung zu schaffen, aber nicht im traditionellen Muster. Wäre ich richtig, wenn ich ein Event sage -> Reservierungen sind one-to-many und Reservierungen -> Users ist many-to-many? (d. h. ein Ereignis hat viele Reservierungen, eine Reservierung hat ein Ereignis, ein Benutzer hat viele Reservierungen und eine Reservierung hat viele Benutzer) – SomeSchmo

Verwandte Themen