Rails nie obsługuje dynamicznych wartości domyślne w migracji. Cokolwiek znajduje się w migracji podczas jej wykonywania, zostanie ustawione na poziomie DB i pozostanie w ten sposób do momentu wycofania, przesłonięcia lub zresetowania migracji. Można jednak łatwo dodać dynamiczne wartości domyślne na poziomie modelu, ponieważ jest on oceniany w środowisku wykonawczym.
1) wartości domyślne ustawienie za pomocą after_initialize
zwrotnego
class Test
def after_initialize
self.day ||= Date.today if new_record?
end
end
użyć tego podejścia tylko jeśli chcesz uzyskać dostęp do atrybutu po inicjalizacji i przed zapisywania rekordu. Takie podejście ma dodatkowy koszt przetwarzania podczas ładowania wyniku zapytania, ponieważ blok musi zostać wykonany dla każdego obiektu wyniku.
2) wartości domyślne ustawienie za pomocą before_create
zwrotnego
class Test
before_create do
self.day = Date.today unless self.day
end
end
Ta funkcja zwrotna jest wyzwalane przez create
rozmowy na modelu. There are many more callbacks. Na przykład ustawienie daty przed sprawdzaniem poprawności na create
i update
.
class Test
before_validation on: [:create, :update] do
self.day = Date.today
end
end
3) Używanie default_value_for gem
class Test
default_value_for :day do
Date.today
end
end
Dziękuję bardzo, to działa – banhbaochay