Nun, ich habe den nächsten Rails-Bereich, wenn ein Wort gegeben Ich fand die Unternehmen, die dieses Wort entweder auf den Namen, die Beschreibung, die Stadt oder in irgendeiner der mit dem Unternehmen verbundenen Produkte.Finden Sie Koinzidenzen in verwandten Tabellen mit SQL und Rails und wissen Sie, wo die Koinzidenzen waren
includes([:products, {city: :department}]).where("unaccent(LOWER(companies.name))
ILIKE('%#{term.parameterize.underscore.humanize.downcase}%')
OR unaccent(LOWER(companies.description))
ILIKE('%#{term.parameterize.underscore.humanize.downcase}%')
OR unaccent(LOWER(cities.name))
ILIKE('%#{term.parameterize.underscore.humanize.downcase}%')
OR unaccent(LOWER(products.name))
ILIKE('%#{term.parameterize.underscore.humanize.downcase}%')"
.gsub("ñ","n")).references(:products, :city, :department)
Das funktioniert ganz gut, aber ich weiß, in welchem (Name, Beschreibung, Stadt oder Produkte) wissen müssen, war die gefunden Zufall.
Ich habe in den nächsten Lösungen gedacht, aber ich bin mir nicht sicher, ob es effizient oder gut genug ist.
Lösung. Trennen Sie den Bereich in 4 verschiedene Abfragen, und verwenden Sie dann eine Schleife und eine Aux-Spalte, um bei jeder Abfrage so etwas wie "Zufall findet in, Name und Beschreibung" einzufügen. dann diese so etwas wie verwenden
query1 | query2 | query3 | query4 # to merge the arrays
Für die Aufzeichnung meine Rails-Anwendung ist Postgres 9.4
Danke, ein virtuelles Attribut ist, was ich brauchte, ich bin etwas besorgt über die Effizienz dieser Methode, weil es wie ein Doppelprozess ist, aber ich schätze, ich werde es versuchen. – Makarov
Ich denke, SQL-Abfragen in einer Iteration zu tun ist eine schlechte Idee, aber Iteration durch etwas bereits im Speicher ist schneller –