ActiveModelSerializer 0.10.0中的Url Helpers?

23

我知道这个版本还没有正式发布,但是今天我检查了rc3,发现在我的序列化器中不能再使用Rails的url帮助工具。在0.8.x版本中,我可以这样做:

class BrandSerializer < BaseSerializer
  attributes :id, :name, :slug, :state
  attributes :_links

  def _links
    {
      self: api_v1_company_brand_path(object.company_id, object.id),
      company: api_v1_company_path(object.company_id),
      products: api_v1_company_brand_products_path(object.company_id, object.id)
    }
  end

end

但在新版本中无法这样做。有什么最好的方法来解决这个问题,以便我可以在我的序列化器中保留我的链接?

编辑: 目前我正在使用以下方法,但希望听到是否有更加惯用的方法。

class BaseSerializer < ActiveModel::Serializer
  include Rails.application.routes.url_helpers

我认为你最好回答了它。 - Blair Anderson
2个回答

7
如果您将以下代码添加到您的ApplicationController或者生成响应的控制器中: serialization_scope :view_context 那么您就可以在序列化器中使用view_context来访问URL助手(或任何视图方法)。
例如:view_context.api_v1_company_brand_path(object.company_id, object.id) 我认为这种方法比将所有URL助手等内容包含在序列化器类中更加简洁。

1
包括被排除的库(就像你所做的那样)肯定是最短的路线(除了修改宝石本身,从成语角度来看)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接