1

Grape & Grape-Entity を使用して、データをエンティティに自動的にシリアル化する方法はありますか? すべての例で params[:var] を使用しているようです ( https://github.com/intridea/grapeから)

desc "Create a status."
params do
  requires :status, type: String, desc: "Your status."
end
post do
  authenticate!
  Status.create!({
    user: current_user,
    text: params[:status]
  })
end

投稿されたエンティティがより複雑な場合 (新しい人 (名、姓、住所など) としましょう)、API が表すエンティティに自動的に変換する方法はありますか? 次のような使用法を探しています:

post do
  authenticate!
  entity.first_name
  entity.last_name
end
4

1 に答える 1

0

あなたのエンティティは ActiveRecord モデルですか? もしそうなら、多分MyModel.new(params)?または、次のように宣言されたパラメーターのみを許可できますMyModel.new(declared(params))。こちらのドキュメントを参照してください。

paramsRuby は、エンティティのフィールドをループして設定できるメタプログラミングのようなものを使用して、自分でやりたいことを簡単に実行できるようにするメタプログラミングの強力な機能を備えています。ただし、やりたいことは実際には複雑であるため、汎用的なソリューションはありません。エンティティに関連付けが深く埋め込まれている場合を想像してみてください。典型的な推奨事項は、API を介して提供されるもの (および返されるもの) は、ものそのものではなく、ものの表現であるという事実を受け入れることだと思います。これに続いて、渡されたものがすでに既存のものを表している場合こと、もしかしたらそのことは単一の ID で表すことができるでしょうか? API が ID を受け取る場合は、それを調べるだけです。これは、Sidekiq などを使用する際のアドバイスです。後でデータベース内のデータを処理する場合は、すべてのデータ自体ではなく、データベース レコードの ID を取得します。これには、その間にデータが変更された場合などに利点がありますが、ここでのポイントは、API がロード可能なものへのポインターを受け入れるようにすることでメリットが得られる可能性があるということです。

あなたが望むものの最良のユースケースは、エンティティが複雑な場合であると思います。これはあなたのケースです。エンティティを単純化することを検討してください。


ストレッチとして:あなたはブドウの実体を見たいと思うかもしれませんが、それはあなたが望むものとは逆のようなものだと思います.高レベルの目的については私に説明してください)応答のためにエンティティと連携することを目的としています。

于 2015-08-09T04:58:58.067 に答える