[rails]carrierwaveで保存した画像のurlを取得する
carrierwave 0.10.0 で確認 imageカラムにcarrierwaveで保存した画像を保存している場合、デフォルトのままだとだとurlメソッドを実行してもpublic以下のパスのみで http://~ が設定されていません。
Sample.image.url #=> /uploads/sample/image/1/sample.jpg
http://~ 形式のURLを取得するにはCarrierWaveのasset_host設定を行う必要があります。
# config/initializers/carrierwave.rb
CarrierWave.configure do |config|
config.asset_host = Settings.url
end
定数管理にはrails_configを使用しています。
(使い方に関しては こちらを参照)
# config/settings.yml
url: 'http://local.url'
環境に応じた設定を記述した後、再読み込みすると
Sample.image.url #=> http://local.url/uploads/sample/image/1/sample.jpg
というように正しくURLが取得できます。
asset_hostを使えば、本番環境やstaging環境はs3やCloudFrontにURLを切り替える、ということも可能です。