There is no “proper” way to do things, really. It’s up to you! Just parent the UI control under the leg or arm. You can also host those attributes on any other control you like. That’s just a template suggestion.
If you only set one space switch reference, it reparents the node under the space, instead of making a single constraint. Is that a problem for your rig? If so, perhaps make a parentConstraint in a post Python script.
BUT, there is a very good reason those UI controls are not parented under the limb. When you have an IK/FK switch parameter hosted underneath the limb it is switching, it propagates the nodes as dirty in a loop, and slows the entire rig down. People have found, and I’ve personally tested that if you host the switch attribute(s) outside of the limb, your rig should end up gaining 10 - 15 FPS in speed.
It’s less convenient for the animators. But the speed gain is well worth it! And no matter where the control is located, you can always access the hostUI by right-clicking on the controls. (Make sure to turn on mGear → “mGear Viewport Menu”)
So I parent my hostUI controls under a COG, Hip, or Body control, so it follows the main body, but doesn’t follow the limbs.