web-dev-qa-db-ja.com

Rails 3.1画像への絶対URL

私はRails 3.1を使用しています。これを理解しようとしています。驚いたことに、Railsには付属していませんこの方法はまったく問題です。

画像への完全な絶対URLを取得する方法を誰かに示すことはできますか?

アプリ内で使用する相対パスを提供するasset_path(image.png)を使用します。私はroot_url + asset_path(image.png)を試してみましたが、それだけでhttp://localhost:3000//assets/image.pngダブルスラッシュ付き

誰かがこれを行う効率的な方法がありますか?

31
alik

ドキュメントアセットホストの使用セクションをご覧ください。 asset_Hostを指定する必要があります。リクエストチェーンから動的に構築することもできます"#{request.protocol}#{request.Host_with_port}"

24
Simone Carletti

これをapplication_helper.rb

def asset_url asset
  "#{request.protocol}#{request.Host_with_port}#{asset_path(asset)}"
end

次に、asset_urlあなたの意見で。

24
greggreg

Rails 4、そしておそらくそれ以前には、以下を使用します:

config.action_mailer.asset_Host = 'https://assets.com'

あたり https://github.com/fphilipe/premailer-Rails/issues/16

11
Luke W

私のconfig/environments/*.rbすでに各環境に合わせて調整しています:

config.domain = 'mysite.dev'

だから、追加するのは簡単なことでした

config.action_controller.asset_Host = "http://" + config.domain

各ファイルに。次にasset_pathは、あたかも奇跡的に動作しますasset_url

6

フォルダー構造の例。

app/
   assets/
      flags/
         32x32/
            en.png
         256x256/
            en.png

絶対フラグイメージパスを生成する場合は、ApplicationHelperに2つのメソッドを追加できます。

module ApplicationHelper

  # Generate flag path by locale
  # - locale. Can be "en", "it", etc.
  # - flag_size. Will be used to set folder size. Folder size can be "32x32", "256x256".
  # Return flag image path. Path will absolute
  def generate_flag_path_by_locale(locale, folder_size = "32")
    folder = "#{flag_size}x#{flag_size}"
    domain_absolute_path = generate_domain_absolute_path
    flag_path = ("#{domain_absolute_path}/assets/flags/#{folder}/#{locale}.png")

    return flag_path
  end

  # Generate domain absolute path
  def generate_domain_absolute_path
    request_protocol = request.protocol
    request_Host_with_port = request.Host_with_port
    domain_absolute_path = request_protocol + request_Host_with_port

    return domain_absolute_path
  end
end

私たちのapps/view/products.html.erbに。私たちは電話する必要があります:

<% flag_path = generate_flag_path_by_locale("en") %> 

最終結果:

http://my_domain.com:3000/assets/flags/32x32/en.png

0
d.danailov