Для тех, кто ищет ответ на что-то похожее, я решил это.Хотя @colincr не ошибается, это не совсем детализирует решение.
Если у вас есть сгущенные маршруты, как я, проще написать для них отдельные ограничения.
route.rb
constraints UserConstraint.new do
get ':code', to: 'documents#index', as: :documents
end
constraints SlugConstraint.new do
get ':code/*slug', to: 'documents#show', as: :document
end
user_constraint.rb
class UserConstraint
def matches?(request)
result = User.where(code: request.path_parameters[:code]).any?
raise Errors::NoCode, 'User not found' unless result
result
end
end
slug_constraint.rb
class SlugConstraint
def matches?(request)
slug = "#{request.path_parameters[:code]}/#{request.path_parameters[:slug]}"
result = Document.where(slug: slug).any?
raise Errors::NoDocumentSlug, 'Document not found' unless result
result
end
end