2015-06-03 71 views
1

创建葡萄创建其工作完全Rails的葡萄嵌套PUT路线灰烬

desc "Create a project." 
     params do 
      group :project, type: Hash do 
      requires :name, type: String, desc: "Name of project." 
      requires :user_id, type: String, desc: "user id" 
      requires :description, type: String, desc: "Description of project" 
      requires :project_type_id, type: String, desc: "Type of project" 
      end 
     end 
     post do 
      Project.create!(
       name: params[:project][:name], 
       user_id: params[:project][:user_id], 
       description: params[:project][:description], 
       project_type_id: params[:project][:project_type_id] 
     ) 
     end 

但是,当我想创建一个PUT动作编辑一些价值观,我有错误从JSON响应行动: error: "project[id] is missing" 我PUT代码:

desc "Update a project." 
     params do 
      group :project, type: Hash do 
      requires :id, type: String, desc: "project ID." 
      requires :name, type: String, desc: "Name of project." 
      requires :user_id, type: String, desc: "user id" 
      requires :description, type: String, desc: "Description of project" 
      requires :project_type_id, type: String, desc: "Type of project" 
      end 
     end 
     put ':id' do 
      Project.find(params[:project][:id]).update!(
       name: params[:project][:name], 
       user_id: params[:project][:user_id], 
       description: params[:project][:description], 
       project_type_id: params[:project][:project_type_id] 
     ) 
     end 

我做的不对的?

+0

你试图用curl或烬以外的东西点击这条路线?我只是问,因为这看起来并不相关。 – adammokan

+0

是的。我用swagger doc编辑项目并且工作得很好。我只是在rails和简单的烬应用程序中创建简单的葡萄api。在余烬应用程序中,我生成了'烬脚手架项目....',就这些。我从[link]中阅读主题(http://stackoverflow.com/questions/26852647/ember-js-post-requests-return-400-from-the-server-grape-api-but-are-stored-suc)我通过添加'group:contact,type:Hash do'来编辑我的Grape API。我不知道自创建新作品后为何编辑不起作用:/ – bimbim

+0

真的,这对任何人都没有帮助。您仍然希望提供示例JSON有效内容。 – adammokan

回答

1

我不知道您的结构,没有看到你在你的PUT请求正在发送什么,但我会认为葡萄代码应该是这样的 - 但是,我完全没有看到你的JSON有效载荷猜测。

put ':id' do 
    Project.find(params[:id]).update!(
    name: params[:name], 
    user_id: params[:user_id], 
    description: params[:description], 
    project_type_id: params[:project_type_id] 
) 
end 
2

确定。我修复此代码,它的工作

desc "Update a project." 
     params do 
      group :project, type: Hash do 
      requires :name, type: String, desc: "Name of project." 
      requires :user_id, type: String, desc: "user id" 
      requires :description, type: String, desc: "Description of project" 
      requires :project_type_id, type: String, desc: "Type of project" 
      end 
     end 
     put ':id' do 
      Project.find(params[:id]).update!(
       name: params[:project][:name], 
       user_id: params[:project][:user_id], 
       description: params[:project][:description], 
       project_type_id: params[:project][:project_type_id] 
     ) 
     end 
+0

好消息!那么,如果你正在使用ember-data,我会继续调整你的API来满足他们的约定,以避免头痛。 – adammokan

+0

感谢您的帮助! :) – bimbim