Как я могу использовать помощник Rails link_to RESTful в этой ситуации? - PullRequest
3 голосов
/ 08 октября 2008

Я в основном хочу использовать link_to для ссылки на метод индекса контроллера. Я попробовал:

<%= link_to 'Recipes', Recipe %> 

но это выводит:

<a href="/recipes/Recipe">Recipes</a>

Что явно не правильно, если он остановит этот последний бит, он будет делать именно то, что я хочу. Я думал, что с RESTful, я как-то начну пропустить действие или что-то в этом роде. Что я недопонимаю?

1 Ответ

6 голосов
/ 08 октября 2008

С остальными маршрутами большую часть времени вы должны вызывать вспомогательный метод для генерации маршрута.

например:

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, и поэтому будут служить неработающие ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...