Url Helper在ActiveModelSerializer 0.10.0中?
我知道这个版本还没有正式发布,但今天我正在检查rc3,我注意到我不能再在我的序列化器中使用Rails url helpers了。 在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
如果将其添加到ApplicationController
,甚至可能添加到生成响应的控制器:
serialization_scope :view_context
然后,您可以使用序列化view_context
中的view_context
来访问URL帮助程序(或任何视图方法)。
示例: view_context.api_v1_company_brand_path(object.company_id, object.id)
我认为这可能比将所有这些URL帮助程序等包含在序列化程序类中更清晰。
包括被排除在外的图书馆(正如你所做的那样)绝对是最短的路线(在修改gem本身之外,在惯用性方面)
- 如何为活动模型序列化器关系选择所需的属性
- 如何通过Rails的Active模型序列化器呈现嵌套对象的父数据?
- Active Model Serializers:nil的未定义方法`url_for’:NilClass
- 强制活动模型序列化程序返回关联
- 更改活动模型序列化器默认适配器
- 使用active_model_serializers序列化权限(例如CanCan)
- ActiveModel Serializers:has_many在运行时有条件吗?
- 如何在active_model_serializers中执行预先加载
- 具有嵌入式ID和侧载的Ember-Data和Active Model Serializer的has_many配置