继承在葡萄中不起作用
Inheritance is not working in grape
我正在使用葡萄 redtful-api。我无法在 Grape 中继承 common_params。我定义了普通
class 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
只是一个局部变量,它不会在作用域结束时继续存在。您可以使用 class 实例变量或 similar 使其工作,但我们不要去那里。您应该通过专用模块在不同的葡萄上共享助手。
module Example
module SharedHelpers
extend Grape::API::Helpers
params :common_params do
requires :param1
requires :param2
end
end
end
现在在不同的葡萄中,您需要 "include" 模块和 use
助手。
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
葡萄中的助手,请使用相同的技术。
我正在使用葡萄 redtful-api。我无法在 Grape 中继承 common_params。我定义了普通 class 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
只是一个局部变量,它不会在作用域结束时继续存在。您可以使用 class 实例变量或 similar 使其工作,但我们不要去那里。您应该通过专用模块在不同的葡萄上共享助手。
module Example
module SharedHelpers
extend Grape::API::Helpers
params :common_params do
requires :param1
requires :param2
end
end
end
现在在不同的葡萄中,您需要 "include" 模块和 use
助手。
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
葡萄中的助手,请使用相同的技术。