Można actionView małpa-łata :: Base, spróbuj tego w konsoli szyn:
helper.image_path "foo" #=> "/assets/foo"
module OldImagePath
def image_path(source)
asset_paths.compute_public_path(source, 'images')
end
alias_method :path_to_image, :image_path
end
ActionView::Base.send :include, OldImagePath
helper.image_path "foo" #=> "/images/foo"
Możesz umieścić ten do inicjowania na przykład. Domyślnie ActionView :: Base zawiera ActionView :: Helpers :: AssetTagHelper i Sprockets :: Helpers :: RailsHelper, które definiują image_path, ale mają pierwszeństwo. Załączam własny moduł, który ma pierwszeństwo nad wszystkimi (kod wewnątrz jest pobierany z ActionView :: Helpers :: AssetTagHelper).
Chociaż sensowne jest użycie potoku aktywów również dla obrazów. Otrzymują sumę mieszającą w swoich nazwach plików, aby mogły być przechowywane w pamięci podręcznej na zawsze po stronie klienta bez pytania serwera, czy plik został zmieniony.
Czy ktoś może to potwierdzić? Skończyło się na tym, że gryzłem kulę i obejmowałem również plik aktywów dla obrazów. – swrobel
Dziękuję @ Siemio działa jak urok !! – wael34218
Dzięki! Użyłem tej techniki, aby powstrzymać błąd AssetNotPrecompiledError przed produkcją błędu 500 serwera podczas produkcji, jeśli wystąpi błąd rozwiązania ścieżki obrazu w potoku zasobów. W moim override of image_path, po prostu nazywam "super (source)", ale dodać klauzulę ratunkową, która rejestruje błąd i zwraca "#" dla ścieżki. Wpisałem linię "ActionView :: Base.send" do inicjalizatora, zgodnie z sugestią. Działa świetnie! –