【问题标题】:Rails-Grape Nested PUT routes for Ember用于 Ember 的 Rails-Grape 嵌套 PUT 路由
【发布时间】:2015-06-03 14:41:03
【问题描述】:

我创造了完美的葡萄创造行动

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

我做错了什么?

【问题讨论】:

  • 您是否尝试过使用 curl 或 ember 之外的其他工具来访问此路线?我只是问,因为这似乎与余烬无关。
  • 是的。我通过 swagger doc 编辑项目并且工作得很好。我只是在 rails 和简单的 ember 应用程序中创建简单的葡萄 api。在 ember 应用程序中,我生成 ember g scaffold projects....,仅此而已。我从link 阅读了主题,并通过添加group :contact, type: Hash do 来编辑我的Grape API。我不知道为什么自创作新作品以来编辑不起作用:/
  • 这对这里的任何人都没有帮助,真的。您仍然需要提供一个示例 JSON 有效负载。
  • 好的。我的前端发送这个:{"project":{"name":"tt","user_id":44,"description":"asdasdasd","project_type_id":3,"created_at":"2015-06-03T14:15:06.689Z","updated_at":"2015-06-03T14:15:06.689Z"}} 我的后端想要这个:{"name":"tt","user_id":45,"description":"asdasdasd","project_type_id":2,"created_at":"2015-06-03T14:15:06.689Z","updated_at":"2015-06-03T14:15:06.689Z" }
  • 将来,在您的问题中提供此类示例将有所帮助。如果我觉得我很粗鲁,我深表歉意,这只是有助于展示完整的上下文以获得最佳答案。

标签: ruby-on-rails json ruby-on-rails-4 grape


【解决方案1】:

好的。我用这段代码修复了它,它可以工作

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

【讨论】:

  • 好消息!好吧,如果您正在使用 ember-data,我会继续调整您的 API 以满足他们的约定以避免头痛。
  • 感谢您的帮助! :)
【解决方案2】:

如果没有看到您在 PUT 请求中发送的内容,我不确定您的结构,但我认为 Grape 代码应该是这样的 - 但同样,我完全在猜测,没有看到您的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2014-12-19
    相关资源
    最近更新 更多