活动模型序列化程序:无法访问 user_url,可以访问 user_path

Active Model Serializers: Unable to acces user_url, can access user_path

我已经与这个 JSON 连载作斗争了大约一个半星期了。 无论我尝试什么 SO / 其他站点解决方案,我都永远无法获得完全合格的 URL(与服务器 运行 所在的位置无关)。我理想的解决方案是在生产服务器上 return http://localhost:3000/user/X if I ran it on my work pc, and https://host.name.organization.com/user/X 的解决方案。它必须独立于我 运行 服务器所在的任何系统。因为这个 rails 主机在 NGINX 反向代理后面,所以如果它只从主机头读取就更好了。

正如您在代码中看到的那样,(到主机的)相对路径已定义并且工作完美,但从来没有 url。其他解决方案以 Rails 错误结束,说我需要静态定义(基本上是硬编码)url 服务器正在 运行 上。

序列化程序

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

  attributes :id, :email, :firstname, :lastname, :birthdate, :created_at, :updated_at

  attribute :uri do
    {user_path: user_path(object)}
  end

  #Latest addition, no visual result, yet no errors either.
  link(:self) { user_url(object) }
end

当前JSON响应

{
  "id": 37,
  "email": "test3@test.coma",
  "firstname": "Test",
  "lastname": "Test",
  "birthdate": "2017-03-13",
  "created_at": "2017-03-13T00:00:22.982Z",
  "updated_at": "2017-03-13T00:00:23.467Z",
  "uri": {
  "user_path": "/user/37"
  }
}

应该是什么(如果 运行 在本地)

{
  Same as above
  "uri": {
     "user_path":"user/37",
     "user_url":"http://localhost:3000/user/37"
   }
}

如果这是 gem 中的 bug/missing 功能,我愿意将其移交给 Github repo

将以下行添加到您的 ApplicationController:

serialization_scope :view_context

然后在您的序列化程序中,您应该能够使用以下示例访问它:

view_context.user_url(object.id)

来源:Url Helpers in ActiveModelSerializer 0.10.0?