1

すべてのパラメーターを一度に収集したい、グレープで投稿メソッドを作成したい

現在、私はそれを次のように使用しています

params do
  requires :id, type: Integer, desc: "post id"
  requires :title, type: String, desc: "Title"
end
post do
  post = Post.new(:id => params[:id],:title => params[:tile])
end 

グーグルの後、私は次のようなものを見つけました

params do
  group :post do
    requires :id, type: Integer, desc: "post id"
    requires :title, type: String, desc: "Title"
  end
end

post do
  #post = Post.new(params[:post])
  #post.save
end 
but it is also asking for post hash

ファイルのアップロードもしたい(つまり、ファイルを追加するためのパラメータ)

4

1 に答える 1

3

:postグループを型として宣言すると、コードが機能しますHash(デフォルトの型は ですArray)。

params do
  group :post, type: Hash do
    requires :id, type: Integer, desc: "post id"
    requires :title, type: String, desc: "Title"
  end
end

ただし、これが何をするかは、期待しているものとは少し異なります。これは、およびを使用してパラメーターpostsubscriptsとして定義します。したがって、エンドポイントが期待するデータは次のようになります。idtitle

post[id]=100&post[title]=New+article

ただし、ここでやろうとしていることはとにかく不必要です。paramsはエンドポイント パラメータの名前をキーとするハッシュであり、オブジェクトが期待する属性はエンドポイント パラメータと同じ名前であるためPost、次のように簡単に実行できます。

params do
  requires :id, type: Integer, desc: "post id"
  requires :title, type: String, desc: "Title"
end
post do
  post = Post.new(params)
end 

もちろん、ユーザーから受け取ったデータは、操作する前に常にサニタイズする必要があるため、この種のショートカットは、個人用またはプロトタイプ品質のアプリにのみ適しています。

于 2014-07-17T14:05:14.450 に答える