Параметр группы 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 

после поиска в Google я нашел что-то вроде

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 ответ

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

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

Другие вопросы по тегам