Mam model, który ma dwa pola, które będę nazywać first_name i last_name, i chcę mieć pewność, że kombinacja tych dwóch jest niewrażliwe na wielkość liter. Stałam się w połowie drogi, korzystając w ten sposób:Railsy validates_uniqueness_of w wielu kolumnach z niewrażliwością na wielkość liter
validates_uniqueness_of :first_name, :scope => :last_name
Problemem jest to, że wyjątkowość check wydaje się być wielkość liter, choć the documentation mówi powinno być przypadek niewrażliwe domyślnie. Tak więc biorąc pod uwagę istniejący rekord:
{ :first_name => 'John', :last_name => 'Smith' }
To będzie dozwolony:
{ :first_name => 'JOHN', :last_name => 'SMITH' }
jak również wszelkie dodatkowe rekord Jeżeli istnieje odmiana przypadku w pierwszej lub ostatniej nazwy. Dlaczego te zapisy są dozwolone? Jak mogę wymusić unikalność wielkości liter w obu polach jednocześnie?
masz rację! Zostałem wprowadzony w błąd przez dokumentację, którą znalazłem. Ustawienie ': case_sensitive => false' sprawiło, że działa ono dla first_name, ale nie działa w przeciwnym kierunku. Nadal będzie akceptował '{: first_name => 'John',: last_name => 'SMITH'}'. Czy istnieje sposób, aby działał dwukierunkowo? Czy po prostu zamieściłbym dwie reguły 'validates_uniqueness_of' z zamienionym polem? –
Próbowałem dodać kolejną weryfikację z dwoma zamienionymi miejscami. Będzie teraz łapał przypadki, w których jedno z pól ma różną obudowę, ale nie, jeśli oba są, więc to się jeszcze kończy: '{: first_name => 'JOHN',: last_name => 'SMITH'}'. –
Po prostu napisałbym niestandardową metodę sprawdzania w tym miejscu, gdybym był tobą. –