Так я боролся с этим для немного сегодня. Я нашел немного менее идеальное решение. Решение ActionController::Base.helpers
не работало для меня.
Это, безусловно, не самое оптимальное решение. Я считаю, что правильным решением может быть добавление инициализатора 'set_configs' в ActiveModelSerializer.
ActionView::Helpers::AssetUrlHelper
использует функцию, называемую compute_asset_host
, которая считывает config.asset_host
. Это свойство будет установлено в инициализаторах railtie для ActionViews и ActionControllers. 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
Возможный дубликат [Access Asset Path from Rails Controller] (http://stackoverflow.com/questions/7827078/access-asset-path-from-rails-controller) –