4

質問:

私は自分のコントローラーでこれを行います:

class Api::Product::V1::LicenseController < ApplicationController

シリアライザーでこれを行うことができないのはなぜですか? (または私はできますか?)

class Api::Product::V1::LicenseSerializer < ActiveModel::Serializer

環境:

1 つのモデルに対応する複数のコントローラー/ルートがあります。

また、コントローラーと 1 対 1 で対応するモデルごとに複数のシリアライザーが必要です。

ActiveModel::Serializers次のようにコントローラーからシリアライザーを指定できます。

render :json => @license_token, :serializer => LicenseSerializer

では、なぜ私もこれを行うことができないのですか?

render :json => @license_token, :serializer => Api::Product::V1::LicenseSerializer

これらが機能することはわかっていますが、これらのような複合名の醜さを避けようとしています。

  • ProductAlphaLicenseSerializer
  • ProductBravoLicenseSerializer
  • ProductCharlieLicenseSerializer

私のモデルはそれぞれ複数の API をサポートしているため、シリアライザーに名前空間を設定したいと考えています。各モデルは、対応するシリアライザーごとに異なる方法で使用されます。

4

1 に答える 1

3

発生したエラー (ある場合) について説明していただけると助かります。アクティブ モデル シリアライザーに関しても同様の懸念がありました。ドキュメントによると、AMS はapp/serializersモデル クラスに基づくパスで自動シリアライザー ルックアップのみを実行するようです。

必要なシリアライザー クラスを手動で指定することを妨げるものはないようです。実際、名前空間付きコントローラー内から、デフォルトLicenseSerializerでモジュール内の名前空間付きクラスを探す必要があります。Api::Product::V1Railsクラスのロードが自動的に解決されるように、適切な名前空間の下でシリアライザーを整理しようとしましたか? たとえばApi::Product::V1::LicenceSerializerapp/serializers/api/product/v1/license_serializer.rb?

また、Rails と統合され、representer パターンを使用した双方向の JSON/XML/JSON+HAL 処理をサポートする ruby​​ Web フレームワークに依存しないROAR gem を使用するroar-rails gemを確認することもできます。jbuilder/jsonify のようにシリアライゼーションを制御できないことに注意してください。ただし、AMS を見ている場合は、詳細からいくらか昇格したいと思っていると思います。ROAR を使用すると、選択したリプレゼンテーション形式に基づいて統一された API を取得し、真のハイパーメディア API にはるかに近づけることができます。

代表者/ROAR アプローチの理論的根拠の一部は、ここここ、およびここにあります。

EDIT : to_jsonの実装も検討してください。私のプロジェクトでは、現在のすべての JSON シリアライザー ライブラリでのパフォーマンスと柔軟性が重要な問題でした。すべての代替案を試した後、最終的にクリーンな JSON DSL を開発し、Ojの作成者と協力して、高性能の文字列バッファ/ストリーム マーシャリング API を開発しました。私のto_json gem は、予算のホスティング サーバーで 1 秒あたり 18,000 個の複雑なオブジェクトを簡単にシリアル化し、生成できる JSON 構造に制限はありません。

于 2013-11-07T05:55:06.170 に答える