book_path
генерируется только один раз для самого тега формы. Он не будет обновляться всякий раз, когда изменяется ваш выбор.
Когда вы отправите эту форму, она запросит следующий URL:
/books/book_id?book[id]=5
Поскольку ваш book_path
считает, что book_id - это тот номер ID, который вы хотели, он пытается найти его. Вы можете сделать то, что вы хотите, изменив код в контроллере с:
@book = Book.find(params[:id])
до:
@book = Book.find(params[:book][:id])
Но от этого пахнет плохо, поэтому будьте осторожны.