Это ошибочная попытка пробить.
Создает маршрут, который соответствует:
/books/1
/books/abcd-absc
Но не:
/books/1/2
/books/abcd-absc/2
slug: /.*?/
полностью бессмысленное ограничение регулярных выражений, поскольку .*
соответствует всему.
Конечный результат - это маршрут, который делает то же самое, что и GET /books/:id
, генерируемый обычным resources :books
, за исключением того, что параметр теперь называется :slug
(woopty do!) - главная причина, по которой он настолько ошибочен, состоит в том, что этот маршрут будет конфликтовать с первым.
Вы действительно можете просто сделать простую перебивку, которая ищет запись по id или слагу с помощью:
@book = Book.where(id: params[:id]).or(Book.where(slug: params[:id])).first!