我想在葡萄中创建一个post方法,我想收集所有的params一次
目前我正在使用它
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
我也想上传文件(即添加文件的参数)
答案 0 :(得分:3)
如果您将:post
组声明为Hash
类型(the default type is Array
),您的代码就会有效:
params do
group :post, type: Hash do
requires :id, type: Integer, desc: "post id"
requires :title, type: String, desc: "Title"
end
end
但是,这样做与您期望的有所不同:它将post
参数定义为id
,将title
定义为下标。因此,您的终端所期望的数据现在如下所示:
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
当然您应该始终清理从用户那里收到的任何数据,然后再采取行动,因此这种快捷方式仅适用于个人或原型质量的应用。