В вашем коде нет ничего принципиально неправильного, поэтому было бы хорошо знать, почему он не работает.
Вы можете совершать всевозможные ошибки, например, непонимание того, что существует () и nilled () работают, но мы действительно не можем догадаться, не увидев симптомов и немного большего контекста - например, к чему на самом деле привязано $ BookName?