することができます猿 - パッチActionView ::ベース、レールコンソールでこれを試してください:あなたは例えば初期化子でこれを置くことができ
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"
。デフォルトでは、ActionView :: BaseにはActionView :: Helpers :: AssetTagHelperとSprockets :: Helpers :: RailsHelperが含まれ、どちらもimage_pathを定義しますが、後者が優先されます。私は自分自身のモジュールを含め、すべてのモジュールよりも優先されます(内部のコードはActionView :: Helpers :: AssetTagHelperから取得されます)。
でも、画像にアセットパイプラインを使用することは理にかなっていますが、彼らはファイルが変更されたかどうかサーバに尋ねずにクライアント側で永久にキャッシュできるように、ファイル名にハッシュサムを得ます。
これは誰でも確認できますか?私は弾丸を噛んで、画像用の資産パイプラインも取り入れました。 – swrobel
ありがとうございます@セミオンは魅力のように動作します! – wael34218
ありがとう!この手法を使用して、アセットパイプラインを通じてイメージパスを解決する際にエラーが発生した場合、AssetNotPrecompiledErrorがプロダクションで500サーバーエラーを生成しないようにしました。私のimage_pathのオーバーライドでは、私は 'super(source)'を呼び出すだけですが、エラーをログに記録し、パスに "#"を返すレスキュー句を追加します。私はあなたが示唆したように、 'ActionView :: Base.send'行をイニシャライザに入れます。完璧に動作します! –