przechowywać wartość w zmiennej klasy wewnątrz modułu, takie jak:Moduł pobiera przeładował każdą prośbę dane tak zainicjowany zostaną utracone
module TranslationEnhancer
def self.install! klass
@dictionaries ||= [] << klass
end
...
end
nazywam to od inicjatora w config/inicjalizatorów:
require Rails.root + "lib" + "translation_enhancer.rb"
TranslationEnhancer::install! TranslationDictionary
Teraz, jeśli uruchomię serwer w środowisku programistycznym, wszystko będzie w porządku podczas pierwszego żądania. Jednak po tym żądaniu @dictionaries są nagle zerowe. Skomentowałem cały inny kod w TranslationEnhancer, więc jestem absolutnie pewien, że cały moduł musi zostać przeładowany za każdym razem, gdy wykonuję żądanie.
Próbowałem przenieść moduł poza katalogiem lib (przeniesiono go do lib_unloadable), następnie próbowałem:
ActiveSupport::Dependencies.explicitly_unloadable_constants << "TranslationEnhancer"
ale nie ponownie. Nie mam pojęcia, jak rozwiązać ten problem, proszę o pomoc.
Otrzymałem Ruby 1.9.2 @ Rails 3.1.rc4.
EDYCJA: Wiem, że mogę ustawić słowniki jako stałą. Ale chciałbym użyć TranslationEnhancer jako biblioteka - tak można używać go bez zmian w innym projekcie i zainstalowanie różnych katalogach, takich jak:
TranslationEnhancer.install! EnglishDirectory, FrenchDirectory
Wartości te won'd zmianie w trakcie wykonywania, oni po prostu zmianę projekt do projektu.
Cóż, to funkcja, a nie błąd :-) Nie mogłem się oprzeć, przepraszam za to. – mliebelt
Dlaczego po prostu nie zdefiniujesz stałej wewnątrz initalizera w ten sposób, że byłbyś w stanie uzyskać do niej dostęp przez nazwę wszystkich aplikacji? Czy musisz zmienić wartość podczas całego okresu użytkowania aplikacji? –
możesz zdefiniować stałą jako hasz i zmienić jej wartość treści, kiedy tylko potrzebujesz (wciąż szukasz lepszego rozwiązania) – apneadiving