1

我想在葡萄中创建一个 post 方法,我想收集一次所有参数

目前我正在使用它

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

但是,这与您所期望的有点不同:它将post参数定义为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 回答