Параметр группы Grape API не работает

Я хочу создать пост-метод в винограде, где я хочу собрать все параметры один раз.

в настоящее время я использую его как

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

Я также хочу загрузить файл (т.е. параметры для добавления файла)


person Nitin Kumar    schedule 17.07.2014    source источник


Ответы (1)


Ваш код будет работать, если вы объявите группу :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 с 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 

Конечно, всегда следует дезинфицировать любые данные, которые вы получаете от пользователя, прежде чем что-то с ними делать, поэтому такой способ быстрого доступа подходит только для личных приложений или приложений уровня прототипа.

person Community    schedule 17.07.2014