2015-07-28 36 views
5

Bir denetleyiciden image_url (ActionView::Helpers::AssetUrlHelper modülünden) aramaya çalışıyorum. Denetleyicim, json yanıtı veren bir API denetleyicisidir. Yani, denetleyici nesneyi hazırlar ve gerçek JSON yanıtını vermek için jBuilder kullanıyorum.Denetleyici katmanında Rails image_url yardımcısını doğru değeri döndürmesi için nasıl kullanabilirim?

class Api::Mobile::HomeController < Api::Mobile::ApplicationController 
    include ActionView::Helpers::AssetUrlHelper 

    def index 
    @items = [Api::Mobile::HomePageItem.new(
       type: 'image', 
       image: image_url("api/mobile/home/tutor-with-student.jpg"))] 
    end 
end 

tutor-with-student.jpg aşağıdaki klasörde bulunduğunu görüntü: İşte kod

app/assets/images/api/mobile/home/tutor-with-student.jpg 

sorun image_url değer döndürür olmasıdır:

http://myhost.com/images/api/mobile/home/tutor-with-student.jpg 

yerine

http://myhost.com/assets/api/mobile/home/tutor-with-student.jpg 

Gerçek görünümden image_url kullanıyorum, yöntem doğru değeri döndürür.

Denetleyici katmanında image_url yöntemini kullanarak doğru değeri nasıl döndürürüm?

cevap

10

Sen kullanmalıdır:

ActionController::Base.helpers.asset_url("api/mobile/home/tutor-with-student.jpg", type: :image) 

ve modül ActionView dahil kaldırmak :: Yardımcıları :: AssetUrlHelper

Ayrıca, ortamınız yapılandırma dosyasında action_controller.asset_host değeri emin olun . Yani, üretim ortamı için config/environments/production.rb içinde olmalı ve önceki yazara

config.action_controller.asset_host='myhost.com' 
0

teşekkür gibi olmak zorundadır. Performans hakkında emin değilim ama bu yöntem bana yardımcı oldu:

def logo_url 
    host_url = request.path == '/' ? request.url : request.original_url.split(request.path).first 
    asset_path = ActionController::Base.helpers.asset_url('logo.png') 
    host_url + asset_path 
end 
# will return 
=> "http://localhost:3000/assets/logo-40e3bf1e10f0c00393ac94f96ea127986955c166eb839266eb2ad6e63b42754c.png"`