Ruby 在Grape中声明资源路径的语法

Ruby 在Grape中声明资源路径的语法,ruby,grape,Ruby,Grape,我想澄清一下在Grape中声明API资源路径的语法。下面的示例声明了资源路径“/items”、“/items/:id”、“/objects”和“/objects/:id”。我不明白的是,为什么“/items/:id”的定义返回null class API < Grape::API format :json default_format :json rescue_from :all, backtrace: true resource :items do de

我想澄清一下在Grape中声明API资源路径的语法。下面的示例声明了资源路径“/items”、“/items/:id”、“/objects”和“/objects/:id”。我不明白的是,为什么“/items/:id”的定义返回null

class API < Grape::API

  format :json
  default_format :json

  rescue_from :all, backtrace: true


  resource :items do

    desc "Returns an array of all items."
    get do
      ITEMS.find.to_a
    end

    desc "Returns an item by its id."
    get '/:id' do

      # hardcoding the document id returns the correct document
      # ITEMS.find_one( "item_id" => 2519 )

      # using the path parameter :id returns null, why???
      ITEMS.find_one( "item_id" => params[:id] )
    end
  end


  resource :objects do

    desc "Returns an array of all objects."
    get do
      OBJECTS.find.to_a
    end

    ##
    # using the route_param syntax correctly returns the document
    # resource path /objects/:id
    ##
    desc "Returns an object by its id."
    params do
      requires :id, type: Integer
    end
    route_param :id do
      get do
        OBJECTS.find_one( "object_id" => params[:id] )
      end
    end
  end

end
class-API2519)
#使用path参数:id返回null,为什么???
ITEMS.find_one(“item_id”=>params[:id])
结束
结束
资源:对象可以
“返回所有对象的数组。”
动手
OBJECTS.find.to_a
结束
##
#正确使用route_param语法返回文档
#资源路径/对象/:id
##
desc“按对象id返回对象。”
情妇
需要:id,类型:Integer
结束
路由参数:id do
动手
OBJECTS.find_one(“object_id”=>params[:id])
结束
结束
结束
结束

您可以使用
资源
路线
方法

参数处理有问题-
params[:id]
默认为
字符串。您的示例硬编码值是一个
Fixnum
(整数)

查询项目列表的代码(未显示)可能正在查找整数值

您可以使用
ITEMS.find_one(“item_id”=>params[:id]。to_i)
内联转换参数

但是,您可能应该使用
params
description块来让Grape为您转换,因为您已经为对象转换了:

desc "Returns an item by its id."
params do
  requires :id, type: Integer
end
get '/:id' do
  ITEMS.find_one( "item_id" => params[:id] )
end