コントローラの中で、ビューの image_tag 等で表示される画像の URL を取得したい時があります。
そんな時は view_context が使えます。
環境
- Rails
- 3.0.7
- Ruby
- 1.9.2-p180
- Paperclip
- 2.3.11
コントローラの中でビューの image_tag に渡すパスを取得したい時があります。
例えば、Paperclip を使って画像を管理しているときに、外部サービスに Paperclip の画像の URL を渡したい時などです。
Paperclip を使って画像を管理していると、url
メソッドで取得できる URL に、コントローラの中では ActionController の AssetHost の設定が付与されません。
そんな時は、view_context を使うと、ビューのコンテキストで評価してくれるので、ActionController の AssetHost の設定もきくようになります。
コントローラの例
1
2
3
4
5
6
7
8
9
10
11
12
|
#-*- encoding: utf-8 -*-
class CallbackController < ApplicationController
def send
user = User.new
user.avatar = params[:user][:avatar]
user.avatar.url
# => "/users/avatars/4/original_me.jpg"
view_context.image_path(user.avatar.url)
# => "http://image.serverhost/users/avatars/4/original_me.jpg"
end
end
|
models/user.rb
1
2
3
|
class User < ActiveRecord::Base
has_attached_file :avatar
end
|
application.rb
1
2
3
4
5
6
7
8
9
10
|
require File.expand_path('../boot', __FILE__)
require 'rails/all'
Bundler.require(:default, Rails.env) if defined?(Bundler)
module MyApp
class Application < Rails::Application
config.action_controller.asset_host = "http://image.serverhost"
...(略)...
end
end
|