С остальными маршрутами большую часть времени вы должны вызывать вспомогательный метод для генерации маршрута.
например:
link_to 'Recipes', recipes_path
Существует оптимизация, при которой вы можете просто передать объект рецепта, и он вызовет вспомогательный метод для вас за кулисами: например:
link_to 'Recipe X', @recipe
совпадает с
link_to 'Recipe X', recipe_path(@recipe)
Однако это особый случай.
То, что вы делаете, передает Сам класс рецепта , а не действительный объект рецепта. Поскольку rails не знает, как с этим справиться, в качестве запасного варианта он просто вызывает .to_s
для всего, что вы ему дали, а затем передает это recipe_path
, поэтому вы видите странный URL.
Совет. Используйте вспомогательные методы _path
вместо методов _url
.
_url
дает вам полный URL-адрес, такой как http://stackoverflow.com/recipes/5
, тогда как _path
просто дает вам /recipes/5
.
Проблема с полным URL-адресом заключается в том, что в процессе работы ваше приложение rails работает как монгрел, сидящий за балансировщиком нагрузки, поэтому он думает, что его имя хоста на самом деле 1.2.3.4
(или каков бы ни был внутренний IP-адрес локальной сети) чем реальный URL, и поэтому будут служить неработающие ссылки.