葡萄:动态前缀?

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