The approaches should yield the same result (if you use requires_grad=True in the first approach).
To make sure this layer is trained, you could check the gradients after the backward call via:
print(model.word_embeddings.weight.grad)

and you should see valid gradients.
If you are seeing None as the return value, the computation graph might have been detached at some point.