2016-08-02 10 views
0

Ich habe eine CSV, die eine Zeichenfolge Spalte name hat, hat es Dinge wie "3 Monate Pasta".Ruby/Rails Zeichenfolge Fall Vergleich innerhalb von Postgres

Ich möchte dies einer vorhandenen DB-Tabelle zuordnen. Der DB-Datensatz hat es als "3 Monate Pasta" gespeichert.

Wenn ich versuche Food.where(name: row['name']) wird es leer ausgehen. weil es eine direkte Zeichenfolge zum Vergleich zwischen "3 Monate Pasta" und "3 Monate Pasta" macht.

Ich habe dies versucht, so gut

Food.where('name LIKE ?', '%' + "3 months pasta" + '%') 

Welche nicht funktioniert, wenn ich die „p“ groß geschrieben, was kann ich die Saiten tun, um an beiden Enden zu passen? Ich möchte eine row['name'].parameterize.underscore tun, um es zu einem einzigen Fall und einem einzigen Stil zu bekommen und dann das Gleiche von der DB und sie zu tun. Das Problem dabei ist, dass es teuer werden könnte, alle Namen zu konvertieren und dann den Vergleich durchzuführen.

Gibt es etwas, was ich tun könnte, um dies zu erreichen?

Antwort

2

Food.where("lower(name) = ?", row['name'].downcase) 
1

Versuchen Obwohl Antwort des @Ursus' vollkommen richtig ist, ich mit nativer Groß- und Kleinschreibung Suche gegen DB gehen würde:

unempfindlich
Food.where('name = ? COLLATE utf8_general_ci', "3 months pasta") 

ci in Kollatierungsnamen steht für „Fall. "