Od nie dawna zacząłem przygodę z railsami, po paru tutorialach udało mi się stworzyć prostą bazę danych i wrzucić na
serwer, niestety po przeniesieniu na serwer i zmianie bazy danych na postgresql, nie działa mi wyszukiwanie po peselu.
Tzn wykonuję się ale nie znajduję danego peselu.
Production.log
Processing by PatientsController#index as HTML
[2016-01-09T12:05:58.327453 #23215] INFO – : Parameters: {“utf8”=>“✓”, “search”=>“94121400175”, “commit”=>“Szukaj”}
D, [2016-01-09T12:05:58.330829 #23215] DEBUG – : ^[[1m^[[35mPatient Load (0.6ms)^[[0m SELECT “patients”.* FROM “patients” WHERE (‘Pesel’ LIKE ‘94121400175’) ORDER BY created_at DESC
I, [2016-01-09T12:05:58.331365 #23215] INFO – : Rendered patients/index.html.erb within layouts/application (2.2ms)
Skoro szukasz tylko po peselu (domyślam się, że jest to string) to dlaczego nie chcesz użyć where w taki sposób (skoro metoda search szuka tylko po peselu):
Patient.where(pesel: "90010112345")
Jeżeli chcesz szukać w taki sposób, sugeruję:
def self.search(query)
where("Pesel LIKE ?", "%#{query}%")
end
Możliwe, że w jakiś sposób do peselu zostałe dodane białe znaki, wtedy wyszuka numeru PESEL i wszystkie co może być przed i za nim (czyli jakieś ekstra znaki).
Sądzę, że mamy do czynienia z pewnym pomieszaniem spraw.
Po pierwsze, to zapis:
1) SELECT * FROM patients WHERE pesel =
nie jest tożsamy z zapisem:
2) SELECT * FROM patients WHERE pesel LIKE
Konwencja:
Patient.where(pesel: "90010112345")
odpowiada wersji 1), czyli użycia “=” i mówi:
"Wybierz rekordy które w kolumnie pesel mają wartość DOKŁADNIE ‘9010112345’ ",
a zapis z użyciem 2) “LIKE” mówi:
"Wybierz rekordy które w kolumnie pesel mają wartość PODOBNĄ DO ‘9010112345’ "
W załączonym przykładzie będzie to bez znaczenia, ale już zastosowanie “%” w
def self.search(query)
where("Pesel LIKE ?", "%#{query}%")
end
powoduje istotne zmiany, bo możesz podać nawet tylko część ciągu “101123” co zostanie zamienione na zapytanie
SELECT * FROM patients WHERE pesel LIKE ‘%101123%’
…czyli szukanie rekordów, gdzie w kolumnie PESEL występuje ciąg znaków “101123”
A osobiście też miałem kiedyś problem z wyszukiwaniem po PESEL i pamiętam, że związane to było z "wycinaniam ZERA “0” (poprzedzającego liczbę dla osób urodzonych po 2000 roku) w czasie jakieś konwersji z arkusza, gdzie traktował ciąg jako liczbę, a nie jako string. Tutaj szukaj “miny”