我正在使用葡萄redtful-api.我无法继承Grape中的common_params.我定义了共同点
类API1中的_params并在API2中调用它会引发错误.如何更改代码以使其工作?
module Example
class API1 < Grape::API
version 'v1'
format :json
prefix :api
resource :exc1 do
common_params = proc do
requires :param1
requires :param2
end
params(&common_params)
get :params_by_pair do
p1 = params[:param1]
p2 = params[:param2]
response = "https://www.example1.com/#{p1}_#{p2}"
end
end
end
end
module Example
class API2 < API1
version 'v1', using: :header, vendor: 'twitter'
format :json
prefix :api
resource :exc2 do
params(&common_params)
get :params_by_pair do
p1 = params[:param1]
p2 = params[:param2]
response = "https://www.example2.com/#{p1}_#{p2}"
end
end
end
end
最佳答案 这个问题与Grape没什么关系,而是变量的范围在Ruby中的作用方式. common_params只是一个本地的,它不会在范围的最后生存.您可以通过使用类实例变量或
similar来使其工作,但让我们不去那里.您应该通过专用模块分享不同葡萄的帮助方式.
module Example
module SharedHelpers
extend Grape::API::Helpers
params :common_params do
requires :param1
requires :param2
end
end
end
现在,在不同的葡萄中,您需要“包含”模块并使用帮助器.
module Example
class API1 < Grape::API
helpers SharedHelpers # !!!
version 'v1'
format :json
prefix :api
resource :exc1 do
params do
use :common_params # !!!
end
get :params_by_pair do
...
end
end
end
end
要使用API2葡萄中的助手,请使用相同的技术.