Rails 5 unterstützen jetzt nativen JSON-Datentyp in MySQL, wenn ich also eine Spalte Daten, die ein Array enthält: ["a", "b", "c"]
, und ich möchte, wenn diese Spalte suchen enthält Werte, also möchte ich im Prinzip folgendes haben: data_json_cont: ["b"]
. Kann diese Abfrage mit Ransack erstellt werden?Wie man Ransack verwendet, um MySQL JSON-Array in Rails 5 zu suchen
1
A
Antwort
0
Nun, ich habe ziemlich viel Weg gefunden, dies mit Arrays zu tun (nicht sicher, ob json enthält für Hash in MySQL). Zuerst um diesen Code in Ihrer aktiven Datensatz Modell:
self.columns.select{|column| column.type == :json}.each do |column|
ransacker "#{column.name}_json_contains".to_sym,
args: [:parent, :ransacker_args] do |parent, args|
query_parts = args.map do |val|
"JSON_CONTAINS(#{column.name}, '#{val.to_json}')"
end
query = query_parts.join(" * ")
Arel.sql(query)
end
end
Dazu Klasse unter der Annahme Shirt
mit Spalte size
, dann können Sie wie folgt vorgehen:
search = Shirt.ransack(
c: [{
a: {
'0' => {
name: 'size_json_contains',
ransacker_args: ["L", "XL"]
}
},
p: 'eq',
v: [1]
}]
)
search.result
Es funktioniert wie folgt: Es wird überprüft, dass die Das in der JSON-Spalte gespeicherte Array enthält alle Elemente des angeforderten Arrays, indem das Ergebnis jedes JSON-Containers einzeln abgerufen, dann alle multipliziert und mit dem Vergleichselement 1 verglichen wird. Sie können dasselbe mit OR tun, indem Sie bitweise ODER statt Multiplikation.
Verwandte Themen
- 1. Benutzerprofil mit ransack suchen
- 2. Wie verwendet man Schlüsselwörter, um Spalte in sql zu suchen
- 3. rails racks gem zu suchen json Spalte
- 4. Rails 5: wie man $ (document) .ready() mit Turbo-Links verwendet
- 5. Wie man Handler verwendet, um zu warten?
- 6. Algorithmus verwendet, um 5-Sterne-Bewertungen zu berechnen
- 7. Rails + Ransack - Drop-Down-Liste-Sammlung?
- 8. wie man form_tag in rails 2.3 verwendet
- 9. Wie JsonArray zu analysieren?
- 10. Schienen, suchen mit Ransack gem, eine Zeichenfolge downcase
- 11. Wie verwendet man Coalesce in MySQL
- 12. Wie konvertiert man JSONObjects in JSONArray?
- 13. Wie verwendet man MySQL-Transaktionen in WordPress?
- 14. Wie man jQuery verwendet, um Variable von PHP zu bekommen
- 15. String zu JSONArray in Java
- 16. wie man Linq verwendet, um ein Sitecore-Feld zu erhalten
- 17. Wie man Methoden verwendet, um in Java zu zeichnen?
- 18. Wie man ffmpeg verwendet, um mp4 zu mov zu kodieren
- 19. Hat jemand Node.JS verwendet, um MySQL zu aktualisieren
- 20. Welchen Algorithmus verwendet Freebase, um nach Namen zu suchen?
- 21. Wie verwendet man __getattr__, um zu attributierende Methoden zu delegieren?
- 22. Wie man mehrere JSONObjects zu JSONArray bringt/bekommt?
- 23. Suchen/Suchen nach fehlenden Werten in MySQL
- 24. Wie ransack verwenden zu delegierten Felder
- 25. Durchsuchen des Tags mit Ransack
- 26. Wie stellt man eine Verbindung von MySQL zu Ruby on Rails her, indem man die Datei database.yml richtig verwendet?
- 27. MySQL verwendet LIKE oder IN, um eine Abfrage zu lösen
- 28. wie JSONArray in android
- 29. simplejson: String zu JSONArray
- 30. wie Datensatz mit Sonderzeichen in mysql suchen