ActionController :: Base.helpers.image_url不会在初始化程序

时间:2015-05-30 11:30:31

标签: ruby-on-rails assets

我在config / initializers中有一个带有以下内容的constants.rb文件:

DEFAULT_IMAGES  = {
  profile: ActionController::Base.helpers.image_url('v2/default_profilepic.jpg'),
  banner: ActionController::Base.helpers.image_url('v2/profile-banner.jpg'),
  missing: ActionController::Base.helpers.image_url('v2/missing.png'),
}

当我尝试在代码中的某个地方甚至在控制台中调用DEFAULT_IMAGES时,我会在没有哈希的情况下返回图像。它应该做什么,我的期望是错的吗?

DEFAULT_IMAGES => {:profile =>“http://localhost:3000/assets/v2/default_profilepic.jpg”,:banner =>“http://localhost:3000/assets/v2/profile-banner.jpg”,:missing =>“http://localhost:3000/assets/v2/missing.png”}

我希望像这样的东西“/assets/v2/missing-d38d4bdbf9f2cf313e346a844de298c0.png”

4 个答案:

答案 0 :(得分:1)

将您的代码放入特定环境文件或application.rb中的after_initialize块:

config.after_initialize do
  DEFAULT_IMAGES  = {
    profile: ActionController::Base.helpers.image_url('v2/default_profilepic.jpg'),
    banner: ActionController::Base.helpers.image_url('v2/profile-banner.jpg'),
    missing: ActionController::Base.helpers.image_url('v2/missing.png'),
  }
end

缺点是你需要通过应用程序的命名空间引用你的常量:

Foo::Application::DEFAULT_IMAGES

答案 1 :(得分:1)

您也可以试试Proc

proc { ActionController::Base.helpers.image_path('v2/missing.png') }.call

答案 2 :(得分:0)

config.asset_host = 'http://localhost:3000'

将此行添加到application.rb并检入rails console。

答案 3 :(得分:0)

这是修复

DEFAULT_IMAGES  = {
  profile: ActionController::Base.helpers.image_path('v2/default_profilepic.jpg'),
  banner: ActionController::Base.helpers.image_path('v2/profile-banner.jpg'),
  missing: ActionController::Base.helpers.image_path('v2/missing.png'),
}

您需要根据预期数据使用*_path,而不是*_url

image_path:计算图片资产的路径。