In general, a cascade controller is nothing more than two independent controllers in series. With independent I mean that they do not intend to control the same value (= measurment, plant output). I.e. One controls the rate and the other the position (or what ever is the case in your specific issue). Nevertheless, you still have only one output from both the controller combined to stabilize both values of interest.
Therefore you have to identify how the input to the plant $u_f$ - i.e. the output of the controllers - influence the outputs ($y_s$ and $y_f$!) of the plant. If you have a ruff idea about the crossover frequencies of these individual systems ($u_f \rightarrow y_f$ and $u_f \rightarrow y_s$) you can separate them into one fast and one slow subsystem. For example, you should have a look at the poles of both subsystems. The pole of the fast and slow system have to be different from each other, i.e.:
$$
\pi_{s,slowest} \neq \pi_{f,slowest}
$$
Otherwise you won't be able to tune the controllers individually!
Take this chart as a reference.

TUNE FAST CONTROLLER
So if you have identified your faster subsystem - i.e. the value that response faster to input changes - you can start tuning the corresponding controller (Fast controller $C_f$) with the help of the 'fast output' $y_f$. This can be done with the common methods like Ziegler-Nichols or whatever other P(ID) tuning method you prefer (best practice is to leave the integrator part - it only reduces the bandwidth of the controller - for this controller and use P(D) at most but this depends strongly on your system).
TUNE SLOW CONTROLLER
Now you have to shape the outer, 'slower' controller $C_s$. For that you have to have a look at the combined closed loop system of the fast control system you just tuned. I.e:
$$
P_s = \frac{P\cdot C_f}{1+P\cdot C_f}
$$
$P_s$ is your new plant. Therefore, you tune your controller on the basis of $P_s$, $r_s$ and $y_s$ as you know it. Here a PI(D) controller is recommended.