葡萄:动态前缀?
Grape: dynamic prefix?
我 api 设置如下:
class Dashboard < Api
def self.inherited(subclass)
super
subclass.instance_eval do
prefix 'dashboard'
#...
end
end
def self.company_id(path)
':company_id' + path
end
helpers do
def current_company
@current_company ||= Company.find(params[:company_id]) if params[:company_id]
end
end
end
问题:我从 Dashboard
继承了 class Employee
,我想要实现的目标是:继承自 Dashboard
的资源应该通过它的命名空间访问'/dashboard/companies/:company_id/employees'
,current_company
工作正常。
每次提供完整路线而不是namespace
方便我都觉得很累:
get 'companies/:company_id/employees'
#...
end
但这不会给出所需的结果:
namespace :companies do
namespace :employees do
...
end
end
据我了解,您正在寻找动态命名空间,对吗?您可以使用字符串而不只是符号来定义动态命名空间。在给定的字符串中,每个 :something
部分表示一个参数,与您在 Rails 或 Sinatra 路由语法中可能习惯的相同。在端点中,您将能够像往常一样访问 params[:something]
。
例如,在你的情况下,你可能会使用这样的东西:
namespace 'companies/:company_id' do
namespace :employees do
get do
# Will respond with the available params (containing :company_id)
body params
end
end
end
我 api 设置如下:
class Dashboard < Api
def self.inherited(subclass)
super
subclass.instance_eval do
prefix 'dashboard'
#...
end
end
def self.company_id(path)
':company_id' + path
end
helpers do
def current_company
@current_company ||= Company.find(params[:company_id]) if params[:company_id]
end
end
end
问题:我从 Dashboard
继承了 class Employee
,我想要实现的目标是:继承自 Dashboard
的资源应该通过它的命名空间访问'/dashboard/companies/:company_id/employees'
,current_company
工作正常。
每次提供完整路线而不是namespace
方便我都觉得很累:
get 'companies/:company_id/employees'
#...
end
但这不会给出所需的结果:
namespace :companies do
namespace :employees do
...
end
end
据我了解,您正在寻找动态命名空间,对吗?您可以使用字符串而不只是符号来定义动态命名空间。在给定的字符串中,每个 :something
部分表示一个参数,与您在 Rails 或 Sinatra 路由语法中可能习惯的相同。在端点中,您将能够像往常一样访问 params[:something]
。
例如,在你的情况下,你可能会使用这样的东西:
namespace 'companies/:company_id' do
namespace :employees do
get do
# Will respond with the available params (containing :company_id)
body params
end
end
end