SQL w railsach

Witam.

Mam takie pytanie raczej organizacyjne. W plikach migracji ustawiam zazwyczaj dla pól tylko :limit i :null.
A co z innymi rzeczami. Chce aby pole było unikalne. Dodać to za pomocą add_index :tabela , [:pole1, :pole2], :unique => true, czy sprawdzać to w modelu - validate_uniq… Czy te dwie metody są równoważne?

Pozdrawiam

Jak nie zrobisz walidacji to dostaniesz wyjątek z ActiveRecorda spowodowany uniquem w bazie danych. Jeśli będzie walidacja to obiekt nie uda się zapisac, unikniesz wyjątku.

Metody te nie są równoważne, ale warto stosować je obie. Od czasu jak stosujemy constrainy w bazie równolegle z walidacjami Rails mamy mniej problemów z błędnymi fiksturami. Warto też stosować plugin http://www.redhillonrails.org/foreign_key_migrations.html z tych samych powodów.

Jeśli dodasz ograniczenia na poziomie SQL to zabezpieczysz się przed problemami gdy zaczniesz grzebać bezpośrednio w bazie. W brew pozorom na produkcji czasem jest to konieczne.

Walidacje na poziomie Ruby są konieczne, jeśli chcesz otrzymywać przyjazne użytkownikowi informacje o błędach zamiast rzuconych wyjątków SQL.

Bragi