私はこのJSONシリアライゼーションを約1週間半かけて戦ってきました。 私が試したどんなSO /その他のサイトソリューションでも、(サーバーが動作する場所に関係なく)完全修飾URLを取得することはできません。私の理想的な解決策は、私が自分の仕事用PCで実行した場合はhttp://localhost:3000/user/Xを返し、プロダクションサーバではhttps://host.name.organization.com/user/Xを返すものです。それは、私がサーバーを稼働させるどのシステムであれ、独立していなければなりません。このレールのホストはNGINXのリバースプロキシの背後にあるので、ホストヘッダーから読み込むだけならいいでしょう。アクティブモデルシリアライザ:user_urlにアクセスできない、user_pathにアクセスできる
コードからわかるように、(ホストへの)相対パスは定義され、完全に動作しますが、URLは決して動作しません。他の解決策は、サーバーが動作しているURLを静的に(基本的にはハードコードして)定義する必要があるというRailsのエラーで終了しました。それがどうあるべきか
シリアライザ
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": "[email protected]",
"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"
}
}
これは何とか宝石のバグ/欠けている機能である場合私はそれをGithub repoに持って行きます。