Похоже, это будет работать:
url_for(@book)
Но это не так. Метод url_for принимает только один аргумент, который может быть либо строкой, экземпляром модели или хэшем опций. Это довольно прискорбно, так как может показаться, что вам, возможно, понадобится сослаться на @book и добавить такие опции, как: only_path или: host.
Одним из способов решения этой проблемы является использование polymorphic_url, который будет отображать правильный абсолютный URL-адрес, даже если ваша модель (вероятно) на самом деле не полиморфна:
polymorphic_url(@book, :host => "domain.com")
Возможно, лучшим маршрутом было бы использование именованного маршрута, который настраивается автоматически при объявлении ресурсов в ваших маршрутах или при использовании опции: as:
# in routes.rb:
resources :books
# or
get "books/:id" => "books#show", as: :book
# in your view:
book_path(@book, :host => "domain.com")