問題タブ [active-model-serializers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Rails: 非 ActiveRecord モデルには ActiveModel::Serializers を含める必要がありますか、それとも単に #as_json に応答する必要がありますか?
Rails 3.2 を使用して、API ベースのモデル (ActiveRecord ではない) に取り組んでいます。to_json
Railsコントローラーでこのモデルを呼び出せるようにしたいです。一連の ActiveModel ドキュメントを読んだ後でも、1 つのことについてまだ明確ではありません。
次のようなモデルがあるとします。
これは期待どおりに機能するはずですか、それとも含める必要がありますActiveModel::Serializers::JSON
か? as_json
/to_json
メソッドが通常定義されている場所と、Rails がさまざまな状況でどのメソッドを自動的に呼び出すかを理解するのに苦労しています...
洞察をありがとう!
ruby-on-rails - active_model_serializersを使用して、デフォルトですべての属性を含め、それらをフィルタリングするにはどうすればよいですか?
active_model_serializersを使用していますが、デフォルトですべてのモデルの属性を含めてから、次のようなものを使用する方法を見つけたいと思います。
不要なものを指定します。
これまで、ドキュメントにある属性以外にエクスポートされた属性を指定する方法を見つけられませんでした。これは、必要なすべての属性を列挙することによって行われます。
ruby-on-rails - アクティブ モデル シリアライザーでルート ノードを作成する
Active Model Serializer を使用して、Rails アプリにこの形式の JSON の配列があります。
次のようにアクティブなモデル シリアライザーを使用して、連絡先の上の 1 レベルのノードを削除するようにするにはどうすればよいですか。
ノード名「contact」も削除したいと思います。
ember.js - Rails+active_model_serializersを使用したEmberJSでの非標準クラス名のオブジェクトのサイドローディング
Railsには次のようなモデルがいくつかあります。
そのようなシリアライザーで:
これにより、次のようなJSONが生成されます。
問題は、サイドロードされたレポーターと担当者のJSONオブジェクトがEmberによってユーザーオブジェクトとして認識されないことです。次のエラーが表示されます。
削除したくない
私のIssueSerializerから、コメントがシリアル化されないためです。
私が検討したこれを解決するためのいくつかの潜在的な方法があります:
- ActiveModel :: Serializerのembedメソッドがincludeオプションでモデルのリストを受け入れた場合、これはJSON応答をフィルタリングしてサイドロードされたコメントのみを含めることができます。
- Emberデータのモデルは、「users」、「reporters」、「assignees」からユーザーをサイドロードするように構成できます...しかし、ソースからわかる限り、sideloadAの1つのキーしかサポートしていないようです。
- どういうわけか、未知のキーのサイドローディングエラーを無視/無効にします(おそらく最も賢明でないアプローチ)。
私がここで見逃している別のオプションはありますか?修正を記述して、rails-api / active_model_serializers、emberjs / data、またはその両方にプルリクエストを送信する必要があると思います。
編集:これに対する私の一時的な回避策は、IssueSerializerを変更して、レポーターと担当者のIDのみをシリアル化することです。
ruby-on-rails-3.2 - シリアライザーの出力のカスタマイズ
[ActiveModel::Serializer][1]
そこで、最近レールに追加された新しいものを使いたかったのです。
シリアライザーを次のように記述した場合:
私が取得するJSONは次のようなものです。
これは私が望むものに非常に近いですが、上記の ""コメントを置いた場所ではHERE
、JSONのラッピングレイヤーがもう1つ必要なので、たとえばmy_results
、これら3つのJSON結果を配列のようにラップします。 JBuilderで新しい要素を作成するときjson.my_results
ruby-on-rails - Rails ActiveModelSerializerに外部キーを埋め込む
アソシエーションを埋め込む場合、次のことができることを知っています
主キーの代わりに配列としてcontact_idやtask_nameなど、id以外の別のフィールドを関連付けに埋め込む方法はありますか?私にお知らせください。
ember.js - 埋め込み関連付けの読み込みはアンダースコア名でのみ機能します
多くの App.LegPlayers を持つモデル App.Leg があります。
次のマッピングを使用して、組み込みの方法で (1 つの POST 要求のみを使用して) それらを永続化できます。
ただし、Rails (active_models_serializers) からのレコードの読み込みは、次のマッピングを使用した場合にのみ機能します (またはマッピングをまったく使用しません)。
しかし、アンダースコア付きのバージョンを使用する場合やマッピングを使用しない場合は、Ember は別の POST リクエストで legPlayers を保持したいと考えています。
したがって、私の質問は次のとおりです。レッグプレーヤーをレッグの一部としてロードし、レッグプレーヤーをレッグの一部としてサーバーにポストするようにするにはどうすればよいですか。したがって、個別のリクエストを使用せずに。現時点では、一度に 1 つのシナリオしか機能していないようです。POST は「legPlayers」を使用した場合にのみ機能し、ロードは「leg_players」を使用した場合にのみ機能します。
ruby-on-rails-3 - アソシエーションを ID の配列としてシリアライズする
モデルの関連付けを、関連付けられたモデルの ID (int) の配列としてシリアル化しようとしています。現在、serializable_hash の :include オプションを次のように使用しています。
次のような出力json:
関連付けられたオブジェクトに「関連付けられた」キーがある理由がわかりません。しかし、それはあまり重要ではありません。私が欲しいのは、次のような出力を得ることです:
これを取得するにはどうすればよいですか?
ruby-on-rails - ActiveModel::Serializers Gem - バージョン管理された API 名前空間の問題
Rails とモジュール/名前空間は初めてです
私のコントローラーは次のように名前空間が付けられています:
また、ActiveModel::Serializers はアプリ フォルダーに "Serializers" フォルダーを配置し、その中に次のコードを含む post_serializer.rb を作成しました。
JSON 応答にアクセスしようとすると、次のようになります。
ここでの問題は何ですか? API バージョンと一緒にシリアライザーを名前空間化する最良の方法は何ですか?
ruby-on-rails - ユーザーがDeviseでログインしたかどうかのテスト
ユーザーがログインしたばかりの場合は、JSON 応答にユーザーを含めてauthentication_token
、API のコンシューマーがそれを追跡し、将来の要求を認証できるようにしたいと考えています。しかし、そうでなければトークンを含めたくありません。Active Model Serializers を使用して JSON 出力をカスタマイズしています。
Devise セッション コントローラーはrespond_with resource
、resource がログイン ユーザーの場所を使用するため、デフォルトでは UserSerializer を使用します。Devise コントローラーをカスタマイズすることもできましたが、むしろinclude_authentication_token?
. ユーザーがログインしたばかりのときに true を返す Devise のメソッドはありますか (つまり、応答が Devise::SessionsController から来ている場合)?