Domyślny język z bazy danych

Witam,

Mam model Language i w bazie danych przechowuje języki. W tabeli tego modelu mam pole default, które określa domyślny język. Chciałbym teraz ładować ten domyślny język (oczywiście jeżeli jest połączenie z bazą danych). Robię to tak:

if ActiveRecord::Base.connected?
  I18n.default_locale = Language.find_by(:default => true).locale.to_sym
else
  I18n.default_locale = :en
end

Problem polega na tym, że nie wiem, w którym miejscu wstawić ten kod. Próbowałem to zrobić w pliku application.rb, ale tam jeszcze nie został wczytany ten model. W którym pliku najlepiej to napisać?

Pozdrawiam,
brando.

Utwórz initializer (jednorazowe wywołanie przy starcie aplikacji) lub metode w application_controller i wywołuj ja callbackiem before_action/before_filter (wywoływanie z każdym requestem).

Poza tym warunek jest jakis dziwny, nie chciałeś uzyskac odwrotnego efektu ?

1 Like

Rzeczywiście, pomyliłem się :slight_smile: Już poprawiłem. Dzięki za wskazówki.

Robienie tego typu rzeczy to generalnei zły pomysł.

Zmiana języka w bazie danych nie spowoduje zmiany języka w aplikacji bez restartu. A restarty aplikacji powinny być rzadkie i wiązać się ze zmianą kodu.

Dodatkowy problem to to że z tego co pamiętam w initializerze nie koniecznie musi być połączenie z bazą danych już.

Ustaw język albo jako zmienną w YAMLu w pliku konfiguracyjnym, albo odpytuj o język bazę danych dla każdego nowego użytkownika, po czym przechowywuj wartość w ciastku.

Za radą @herman zrobiłem to callback’iem before_filter w aplication controller i język zmienia się bez problemu. Nie potrzeba restartu aplikacji, ponieważ nie jest to initializer.