2013-07-24 22 views
5

W aplikacji Railsowe nazwy kolumn, typy i wartości domyślne są pobierane bezpośrednio z bazy danych. Czy istnieje sposób sprawdzania poprawności od ograniczeń bazy danych podczas inicjowania lub podczas próby zapisania?Konwersja więzów bazy danych na sprawdzanie poprawności w Railsach

Pozwoliłoby to na większą DRYness i zagwarantowanie, że wszystkie dane mogą być zatwierdzone w sposób miękki przed naciśnięciem DB i otrzymaniem wyjątku, ponieważ sprawdzanie poprawności obejmowałoby wszystkie ograniczenia bazy danych. Ograniczenia bazy danych są autorytatywnym źródłem informacji o nieważności danych podczas ich używania.

Alternatywnie, czy możliwe jest zrobienie ActiveRecord ratunku z uderzenia w bazę danych i działanie tak, jakby nie powiodło się słabe sprawdzanie poprawności? Oznaczałoby to, że ograniczenia bazy danych mogą być zmanipulowane zewnętrznie bez ponownego uruchamiania lub edytowania aplikacji Rails, wydajność poprawiłaby się, ponieważ walidacja niepowtarzalności nie wymagałaby osobnego zapytania, a także, że walidacja niepowtarzalności byłaby odporna na warunki wyścigu.

Odpowiedz

3

Można użyć egzekwowania przepisów schematu GEM:

https://github.com/twinge/enforce_schema_rules

To sprawdza swój model przed już utworzonych w schemacie bazy reguł.

Przykład:

class Person < ActiveRecord::Base 
    enforce_schema_rules :except => :dhh 
end 
+0

Dobra odpowiedź! Nie próbowałem, ale klejnot wygląda bardzo prosto, efektywnie i lekko na kodzie źródłowym, konwertując schemat schema.rb na sprawdzanie poprawności, ale nie kontrolując bazy danych. Nie działałby dobrze w moim przypadku użycia, dzieląc DB z kimś, kto ciągle zmieniał schemat, ale z pewnością będzie mógł z niego korzystać w przyszłości. – user1158559

Powiązane problemy