ActionView::Helpers::AssetUrlHelper

alias: path_to_asset

def asset_path(source, options = {})

説明

アセットのパスの文字列を返します。image_tag などのアセットのタグのヘルパーは、これで src 属性などの値を作ります。

image_path、javascript_path、stylesheet_path、audio_path、video_path、font_path は、options の type にそれぞれの種類を入れて、このヘルパーを呼びます(image_path("logo.png") は asset_path("logo.png", type: :image) と同じです)。

引数

値を変えると、ERB と HTML が変わります。

パスにします。渡す値によって、次のように変わります。
  • URL(https:// のような 〜://、//、data:、cid: で始まる文字列):そのまま返します。
  • / で始まる文字列("/photo.png"):そのままパスにします。
  • それ以外の文字列("logo.png"):アセット(app/assets の中のファイル)を探し、ファイル名にハッシュを付けたパスにします。見つからなければ、Propshaft::MissingAssetError になります。探してハッシュを付けるのは Propshaft の動きで、アセットの仕組みを入れていないアプリでは、探さずに /(種類が決まっていれば、/images/ などのフォルダ)を前に付けたパスにします。
? や # から後ろの部分は(後ろに 1 文字以上あるとき)、いったん外してパスを作り、最後に付け直します。空の文字列なら空の文字列を返し、nil なら ArgumentError になります。
options= {}
アセットの種類です。渡す値によって、次のように変わります。
  • :javascript、:stylesheet:source の拡張子が .js か .css でないときに、後ろに付けます("application" は application.css を探します。"logo.png" は logo.png.css を探すので、Propshaft::MissingAssetError になります)。
  • skip_pipeline も渡したとき:種類ごとのフォルダ(:image なら /images)を前に付けます。
  • ほか:Propshaft はアセットを種類で分けないので、パスは変わりません(アセットの仕組みを入れていないアプリでは、skip_pipeline がなくてもフォルダを付けます)。
".css"
type で決まる拡張子の代わりに、渡した拡張子を、source の拡張子と違うときに後ろに付けます。"logo.png" に付けると logo.png.css を探すので、Propshaft::MissingAssetError になります。false を渡すと、type が :javascript などでも、拡張子を付けません。
true にすると、アセットを探さず、/ を前に付けたパスにします(type も渡したときは、/images/ などの種類ごとのフォルダ)。public の中のファイルを指すときに使います。
"cdn.example.com"
パスの前に付けるホストです。デフォルトは config.asset_host の値です。このサイトは nil なので、protocol に :request を渡さないかぎり、ホストを付けません。https:// などで始まらないホストには、protocol で決まる形を前に付けます。%d を入れると、パスごとに決まる 0 から 3 の数に置き換えます(assets%d.example.com は assets0.example.com など)。
https:// などで始まらないホストの前に付ける形です。
  • :relative:// を付けます(//cdn.example.com/…)。
  • :request:今のリクエストの形(http:// か https://)を付けます。host を渡さず、config.asset_host もないときは、今のリクエストのホストを付けます(asset_url と同じ URL になります)。
  • 文字列("https")::// を付けて前に付けます。
デフォルトは config.action_controller.default_asset_host_protocol の値で、それもなければ、リクエストがあるときは :request、ないとき(メーラーなど)は :relative です。
ここにない options は、使いません。

ERB

直前との違い: 追加 削除 変更


          

HTML