所以我今天一直在努力解决这个问题。我发现了一个不太理想的解决方案。该ActionController::Base.helpers
解决方案对我不起作用。
这当然不是最优化的解决方案。我的想法是,正确的解决方案可能是将“set_configs”初始化程序添加到 ActiveModelSerializer。
使用ActionView::Helpers::AssetUrlHelper
了一个名为compute_asset_host
which reads的函数config.asset_host
。该属性看起来是在 ActionViews 和 ActionControllers 的 railtie 初始化程序中设置的。ActionController::RailTie
所以我最终继承了 ActiveModel::Serializer 并config.asset_host
在构造函数中设置属性,就像这样。
class BaseSerializer < ActiveModel::Serializer
include ActiveSupport::Configurable
include AbstractController::AssetPaths
include ActionView::Helpers::AssetUrlHelper
def initialize(object, options={})
config.asset_host = YourApp::Application.config.action_controller.asset_host
super
end
end
这让我大部分时间。这些辅助方法也使用协议值;它可以作为选项哈希、配置变量中的参数传递,或从请求变量中读取。所以我添加了一个辅助方法BaseSerializer
来传递正确的选项。
def image_url(path)
path_to_asset(path, {:type=>:image, :protocol=>:https})
end