为什么调用带参数的方法会返回404错误?

时间:2014-08-25 12:05:52

标签: ruby rest grape

我对Ruby很陌生,我知道一点Sinatra但我真正需要的是我的应用程序是Grape for rest api。

使用带参数的方法就像魅力一样,但是当我尝试添加参数时,我得到404未找到异常。

我在哪里错了?感谢

        resource :devs do

        desc "Get all devs"
        get do
            authenticate!
            Dev.all
        end

        desc "Get dev by email"
        params do
            requires :email, type: String, desc: "Dev's email"
        end
        route_param :email do
            get  do
                authenticate!
                @devs = Dev.all(:email == params[:email])
                #!error('email not found', 204) unless @devs.length > 0
            end
        end

        desc "Get dev by API key"
        get :key do
            authenticate!
            @dev = Dev.first(:api_key == params[:key])

            !error('email not found', 204) unless @devs.length > 0
        end
    end

这是我在PostMan中的调用(我还在那里添加了Apikey的标题)

localhost:9292/devs/email/orelzion@gmail.com

但它总是给我相同的结果404

1 个答案:

答案 0 :(得分:1)

route_param指令并不像您认为的那样工作。根据您发布的代码,您应该访问的链接是localhost:9292/devs/orelzion@gmail.com

如果您希望代码与您编写的URL匹配,请使用嵌套命名空间(或等效地,嵌套资源):

resource :devs do
  ...

  namespace :email do
    desc "Get dev by email"
    params do
      requires :email, type: String, desc: "Dev's email"
    end
    route_param :email do
      get do
      ...
      end
    end
  end

  ...