Możliwe duplikaty:
Ruby on Rails: gdzie definiować stałe globalne?
Jestem zainteresowany robieniem tego w „Rails Way”nowa aplikacja. Chciałbym również odnieść się do stałych w pewnym kontekście, aby kod był bardziej czytelny. Mam aplikację, w której użytkownik może poprosić o dostęp do zestawu danych innego użytkownika. AccessRequest może mieć jeden z następujących stanów:
Przejrzeć Odmówiono Zatwierdzony
Widzę te wartości używane w raportowaniufunkcje w przyszłości, dlatego chcę, aby były one stałe, aby uniknąć problemów z pisownią lub dużymi literami. Myślałem, że po prostu umieszczę je w pliku constants.rb w katalogu config / initializers.
Chciałbym nazywać je AccessRequest ::PRZEJRZEĆ. Skoro mam już model o nazwie AccessRequest, czy warto go tam umieścić? A może zawinąć je w klasę w pliku constants.rb w katalogu config / initializers? W którą stronę jest Rails Way?
Odpowiedzi:
42 dla odpowiedzi № 1Nie musisz używać stałych w Rails 3. Lepiej jest używać singletonu Rails :: Application.
W pliku application.rb możesz zdefiniować constante w następujący sposób:
module Yourapp
class Application < Rails::Application
config.access_request.review = "xxx"
end
end
Po w kodzie możesz zadzwonić
Yourapp::Application.config.access_request.review
Po zmianie wartości w każdym środowisku wystarczy zdefiniować config.xx w swoim config/environments/production.rb
lub inne środowisko.
28 dla odpowiedzi nr 2
Spóźniona odpowiedź, ale publikowanie jako ta odpowiedź wciążpojawia się w wynikach wyszukiwania. Umieszczenie stałej w modelu ma sens, ponieważ stała dotyczy bezpośrednio tego modelu. Używanie konfiguracji aplikacji Railsowej do przechowywania stałych jest nieprawidłowe.
Zgodnie z komentarzem wymienionym w application.rb:
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded
To nadal obowiązuje od Rails 3.