Rails Grape API'id无效'在请求中不需要id

时间:2015-12-28 17:04:39

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

我有一个受门卫保护的Grape API,我有一堆完美的方法。但是,有一种方法表现得很奇怪。 这是一个不需要参数的GET请求,并且运行它会引发以下错误:

  在 Grape :: Exceptions :: ValidationErrors

     

id无效

我的方法如下:

desc 'Get all the cards of current customer'
params {}
get 'all' do
  current_customer.discount_cards.to_json(include:
  {
    barcode: {
      include: :barcode_type
    }
  })
end

日志说错误发生在logger.rb文件的第17行,如下所示:

module API
  class Logger
    def initialize(app)
      @app = app
    end

    def call(env)
      payload = {
        remote_addr: env['REMOTE_ADDR'],
        request_method: env['REQUEST_METHOD'],
        request_path: env['PATH_INFO'],
        request_query: env['QUERY_STRING'],
        x_organization: env['HTTP_X_ORGANIZATION']
      }

      ActiveSupport::Notifications.instrument 'grape.request', payload do
        @app.call(env).tap do |response| # <-- logs say the error is here
          payload[:params] = env['api.endpoint'].params.to_hash
          payload[:params].delete('route_info')
          payload[:params].delete('format')
          payload[:response_status] = response[0]
        end
      end
    end
  end
end

我的主要base.rb课程如下:

module API
  class Dispatch < Grape::API
    mount API::V1::Base
  end

  Base = Rack::Builder.new do
    use API::Logger
    run API::Dispatch
  end
end

我真的无法理解它所讨论的id,而且,所有其他api方法都可以正常工作(post,get,put,delete)。

你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

我最近也遇到过这个问题,结果证明这是我的代码订单问题。我找到了答案here

  

Grape按顺序评估路由,因此使用两个路由/:id和/ nearby_missions,它首先匹配/:id,使id = nearby_missions。然后它尝试将nearby_missions强制转换为失败的Integer,并且你得到了丢失的id错误。

     

你可以通过向第一条路线添加要求来解决这个问题:/ \ d * /(没有测试),但你可能最好按照你希望它们被评估的顺序对它们进行排序,就是你做的。

我的问题中没有足够的信息可以确定这也是你的问题,但很可能就是这样!