活动模型序列化程序:无法访问 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?
我已经与这个 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?