2017-04-01 6 views
0

, damit ich eine diese Spalte in einer Tabelle haben t.text "foo", default: [], array: trueRails Abfrage Vergleich gegen Postgres Array Spalte

Und ich habe dieses Array-Liste in einer Hilfsdatei,

module HelperData 

    Helper_array = [ 
    "data_1", 
    "data_2", 
    "data_3", 
    "data_4", 
    "data_5" 
    ] 
end 

Im Inneren des FooName.rb Modell gibt es eine Linie include HelperData.

Also die Abfrage, die ich übergeben möchte, ist der Include-Operator && im Vergleich von PG-Arrays, basierend auf dieser Postgres Guide.

Ich habe die folgenden Abfragen versucht:

FooName.where("foo" && HelperData::Helper_array). Diese Abfrage gibt den Fehler ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: zurück. Der Syntaxfehler liegt bei den Elementen in HelperData::Helper_array. Ich habe eine leichte Ahnung, dass es ist, weil Foo:text ist, aber die Daten in Helper_array ist ein string, obwohl ich nicht sicher sein kann.

FooName.where("foo && HelperData::Helper_array"). Diese Abfrage gibt den Fehler ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: zurück. Offensichtlich ist das dann nur die falsche Syntax.

Was ist die richtige Abfrage zu finden, ob die foo Array keine Elemente hat, die mit dem Helper_array überlappen, und kehren alle FooName Objekte, die Elemente überlappende hat?

Antwort

0

Versuch:

FooName.where("foo && ARRAY[?]::text[]", HelperData::Helper_array) 

beziehen sich auf diesen Link https://www.postgresql.org/docs/current/static/functions-array.html

+0

'Active :: StatementInvalid: PG :: UndefinedFunction: ERROR: Operator existiert nicht: Text [] && character varying []' diese Wirft Error. – angkiki

+0

em, Entschuldigung dafür, finden Sie heraus, dass die Spalte "Text" -Typ, nicht "String" -Typ ist. Versuchen Sie 'FooName.where (" foo && ARRAY [?] :: text [] ", HelperData :: Helper_array)'. Ich habe es in meiner Rails-Konsole getestet, es funktioniert. –

+0

Okay danke! Ich werde es testen und überprüfen Sie Ihre Antwort als richtig, wenn es funktioniert! :) – angkiki

Verwandte Themen