現在、特定のイベントに基づいてActiveRecordオブジェクトを外部サービスに渡す必要がある、小さなRails 5アプリケーションを開発中です。私のモデルでは、私は次のように定義されていますRailsのオブジェクトの関連付けを動的にインクルードする
# /models/user.rb
after_create :notify_external_service_of_user_creation
def notify_external_service_of_user_creation
EventHandler.new(
event_kind: :create_user,
content: self
)
end
EventHandler
は、JSONにこのオブジェクトに変換され、外部サービスへのHTTPリクエストを通してそれを送信しています。
{
"id":1234,
"email":"[email protected]",
"first_name":"Thomas",
"last_name":"Anderson",
"association_id":12,
"another_association_id":356
}
は今、私はこれに直接、すべての最初のレベルの関連付けを含める方法が必要になり、代わりにちょうどFOREIGN_KEYを示す:オブジェクトに.to_json
を呼び出すことで、これはこのようになりますJSON出力をレンダリングします。 object
この場合のユーザのインスタンスであるobject.class.name.constantize.reflect_on_all_associations.map(&:name)
と、このリストを使用します。
{
"id":1234,
"email":"[email protected]",
"first_name":"Thomas",
"last_name":"Anderson",
"association_id":{
"attr1":"some_data",
"attr2":"another_value"
},
"another_association_id":{
"attr1":"some_data",
"attr2":"another_value"
},
}
私の最初の考えはそうのようなモデルに反映させるためだった。だから私は探していますコンストラクトは、このようなものになるだろう関連付けをループして出力に含めます。これはむしろ面倒だと思われますので、Ruby 2.4とRails 5を使ってこれを実現するより良い方法があるのだろうかと思っていました。
あなたはJSONのシリアライズのために何を使うのですか? https://github.com/rails-api/active_model_serializersは関連付けをサポートしています。 – MikDiet
@MikDiet私はobejctで '.to_json'を呼び出しています。それだけです。 – Severin