如何在Controller层上使用Rails image_url helper以便它返回正确的值?

p.m*_*los 7 assets ruby-on-rails asset-pipeline ruby-on-rails-4.1

我试图从控制器中调用image_url(来自ActionView::Helpers::AssetUrlHelper模块).我的控制器是一个API控制器,可以呈现json响应.因此,控制器准备对象,我jBuilder用于呈现实际的JSON响应.这是代码:

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
Run Code Online (Sandbox Code Playgroud)

该图像tutor-with-student.jpg存在于以下文件夹中:

app/assets/images/api/mobile/home/tutor-with-student.jpg
Run Code Online (Sandbox Code Playgroud)

问题是image_url返回值:

http://myhost.com/images/api/mobile/home/tutor-with-student.jpg
Run Code Online (Sandbox Code Playgroud)

代替

http://myhost.com/assets/api/mobile/home/tutor-with-student.jpg
Run Code Online (Sandbox Code Playgroud)

请注意,当我使用image_url实际视图时,该方法返回正确的值.

如何image_url在Controller层上使用该方法以使其返回正确的值?

thu*_*der 14

你应该使用:

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

并删除包含模块ActionView :: Helpers :: AssetUrlHelper

此外,请确保已action_controller.asset_host在环境配置文件中设置该值.因此,对于您的生产环境,它应该是config/environments/production.rb,它必须是

config.action_controller.asset_host='myhost.com'
Run Code Online (Sandbox Code Playgroud)