Grape API组参数无效

时间:2014-07-17 13:11:42

标签: ruby-on-rails grape grape-api

我想在葡萄中创建一个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

我也想上传文件(即添加文件的参数)

1 个答案:

答案 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 

当然您应该始终清理从用户那里收到的任何数据,然后再采取行动,因此这种快捷方式仅适用于个人或原型质量的应用。