2017-03-17 6 views
1

私はこの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に持って行きます。

答えて

1

あなたのApplicationControllerにに次の行を追加します。その後、あなたのシリアライザでは、次の例を使用してアクセスすることができるはず

serialization_scope :view_context

を:

view_context.user_url(object.id)

出典:Url Helpers in ActiveModelSerializer 0.10.0?

関連する問題