Ich versuche meine sehr einfache Volltextsuche in meiner Phoenix-Anwendung mit Ecto und PostgreSQL zu implementieren. Basierend auf ein Beispiel und PostgreSQL docs Ich habe in meinem Controller:Fehler ERROR (undefined_table) in einer Volltextsuche mit Ecto und PostgreSQL
def search(conn, %{"q" => para}) do
search = User |> User.search(para) |> Repo.all
render(conn, "search.html", search: search)
end
und in meiner "Modell" Datei (zusammen mit der Definition der User
Felder):
def search(query, search_term) do
(from u in query,
where: fragment("to_tsvector(u.name) @@ plainto_tsquery(?)", ^search_term),
order_by: fragment("ts_rank(to_tsvector(u.name), plainto_tsquery(?)) DESC", ^search_term))
end
ich diese bekommen Fehler:
ERROR (undefined_table): missing FROM-clause entry for table "u"
ist das nicht from u in query
, genug (name
ist eine von User
Felder)?
Es funktioniert, aber jetzt, wenn sie versuchen '<%[email protected]%>' in meiner Vorlage ich noch einen Fehler bekommen zugreifen, da ich alle Daten aus dem Modell bin immer: 'Listen in Phoenix.HTML und Templates dürfen nur Ganzzahlen enthalten, die Bytes, Binärdateien oder andere Listen repräsentieren, ungültiger Eintrag:% MyProj.User {__ meta__: # Ecto.Schema.Metadata <: geladen," Benutzer ">, Kontakte:" Tlm : 22222222 ", Details: nil, facebook: null, id: 16, inserted_at: # Ecto.DateTime <2016-10-03 13:55:30>, Name:" blabla ", aktualisiert_at: # Ecto.DateTime <2016- 10-03 13:55:30>, web_page: nil} '. Ich habe versucht, Punktnotation ohne Erfolg zu verwenden ... –
'@ search' ist eine Liste. Was genau möchten Sie aus der Liste drucken? Sie können etwas wie 'for' verwenden:' <% = für Benutzer <- @search do%><% = user.name%><% end %> '. – Dogbert
Richtig! Ich bin einfach zu verärgert, um klar zu denken! Das erste Mal mit SQL und dem Gefühl, dass ich es nie bekommen werde :) Ich werde ein paar mehr fokussierte Fragen öffnen, wenn ich nicht weiterkomme. Danke Dogbert! –