2015-07-28 12 views
5

Tôi đang cố gắng gọi image_url (từ mô-đun ActionView::Helpers::AssetUrlHelper) từ trong bộ điều khiển. Bộ điều khiển của tôi là một bộ điều khiển API để trả lời json. Vì vậy, bộ điều khiển chuẩn bị đối tượng và tôi đang sử dụng jBuilder để hiển thị phản hồi JSON thực tế. Đây là mã:Làm thế nào tôi có thể sử dụng Rails image_url helper trên lớp Controller để nó trả về giá trị chính xác?

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 

Hình ảnh tutor-with-student.jpg tồn tại trong thư mục sau:

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

Vấn đề là các image_url trả về giá trị:

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

thay vì

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

Lưu ý rằng khi tôi đang sử dụng image_url từ chế độ xem thực tế, phương thức trả về giá trị chính xác.

Tôi có thể sử dụng phương pháp image_url trên lớp Trình điều khiển để nó trả về giá trị chính xác như thế nào?

Trả lời

10

Bạn nên sử dụng:

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

và loại bỏ sự bao gồm của các mô-đun ActionView :: Helpers :: AssetUrlHelper

Ngoài ra, hãy chắc chắn rằng bạn đã thiết lập giá trị action_controller.asset_host trong tập tin cấu hình môi trường của bạn . Vì vậy, đối với môi trường sản xuất của bạn, nó phải ở trong config/environments/production.rb và nó phải giống như

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

Nhờ tác giả trước đó. Tôi không chắc chắn về hiệu suất nhưng phương pháp này đã giúp tôi:

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"` 
Các vấn đề liên quan