如何在ActiveModel :: Serializer中使用`root_url`?

时间:2016-01-18 19:20:21

标签: ruby-on-rails ruby-on-rails-4 active-model-serializers

我想通过添加来编辑DB中的实体URL。如何在序列化程序中使用root_urlroot_path

这样的事情:

class TrackSerializer < ActiveModel::Serializer
  attributes :id, :title, :mp3, :ogg
  has_one :promo_album

  def mp3
    root_url + object.mp3
  end

  def ogg
    root_url + object.ogg
  end
end

但这不起作用。

3 个答案:

答案 0 :(得分:4)

问题是默认情况下不包含Rails.application.routes.url_helpers。如果你替换

root_url 

Rails.application.routes.url_helpers.root_url 

你应该得到你正在寻找的结果。

答案 1 :(得分:0)

我忘了在java.util.WeakHashMap<K, V>中定义root param。 routes.rb帮助我在序列化程序中获得include Rails.application.routes.url_helpers

答案 2 :(得分:0)

Rails 4:我在应用程序控制器中设置了配置变量。

  class ApplicationController < ActionController::Base
  before_action :set_root

  protected
  def set_root
    Rails.application.config.root_url = root_url
  end

我可以在我的模型中访问:

Rails.application.config.root_url

注意:它要求您在routes.rb。

中配置root