2013-11-20 22 views
5

Railsアプリケーションでactive_model_serializers - 0.8.1を使用しています。特定のコントローラのActiveModel :: Serializersを無効にするにはどうすればよいですか?

アプリはrails-apiActionController::APIと同様にActionController ::メタルから継承するいくつかのAPIの特定のコントローラを持っています。

さて、ActiveModel :: Serializersは、上記のAPIコントローラでのみ使用します。
これは可能ですか?

注:シリアライザのdocumentation使用で述べたように
が明示的に

render :json

を交換することで回避することができます。

render :json => @your_object.to_json

私たちは、よりエレガントな解決策を求めています上記のものよりも。
ありがとうございます。

+0

はあなたが目指しているものを示したコード例を与えてもらえますか?あなたの質問を大きくはっきりさせるのに役立つと思います。 – Davidann

+0

@Davidann私たちは、active_model_serializersがオプションで動作するコントローラをホワイトリストに入れたいと考えました。 –

答えて

1

優雅な解決策があるかどうかわかりません。あなたはActionController :: Serialization - https://github.com/rails-api/active_model_serializers/blob/5a92e00b51927c9c0e7c90f92c825aff09314bfd/lib/action_controller/serialization.rbをmonkeypatchしなければならないようです。

最小限の変更はおそらくbuild_json_serializerメソッドをオーバーライドし、ActiveModelSerializersを使用しないコントローラでnilを返すことになります。コントローラー内のbuild_json_serializerが常にnilを返す場合、動作はデフォルトで非AMSシリアル化になるはずです

残念ながら、このクラスは変更のために構造化されていません(プライベートメソッドなど)ので、プルリクエストあなたの仕事をより簡単にする。 AMSを含める前に「元の」_render_option_jsonメソッドのエイリアスを維持するか、build_json_serializerをプライベートではなく保護するか、コントローラごとにAMSを無効にする設定オプションを追加することは、すべて合理的な変更です。

2

シリアル化を無効にする必要があるという問題もありましたので、コントローラーでdisable_serializationを呼び出して、特定のコントローラーでシリアル化を無効にする機能を追加したthis pull requestを作成しました。

5

また、行うことができます。

respond_with @your_object, serializer: nil 
4

あなたはそのコントローラ内のすべてのアクションのためのシリアライザを無効にするには、コントローラ上のdefault_serializer_optionsメソッドをオーバーライドすることができます。

def default_serializer_options 
    { 
    serializer: nil 
    } 
end 

我々は現在、他の方法で私たちのJSONを生成しているが、私は特定のリソースのためのActiveModel::Serializersを調査したかったです。これは、宝石を追加するとすべてコントローラがシリアライザを使用しようとしていることを意味します。私がアプローチをテストしたいだけではありません。

デフォルトでシリアライザを使用することは素晴らしいことですが、既存のコントローラをこのアプローチに移行するには時間が必要です。私はシリアライザを使用しないように(上記の方法を使用して)他の既存のコントローラを更新したので、コントローラごとにシリアライザを追加することができます。

0

@ dbjの答えは、正しくはありませんが、respond_withが移動されたためにRails4では機能しません。

NoMethodError: The respond_with feature has been extracted to the responders gem. Add it to your Gemfile to continue using this feature: gem 'responders', '~> 2.0' Consult the Rails upgrade guide for details.

本当に推測した簡単な修正、ちょうど行うにした

render json: @you_object, serializer: nil

関連する問題