Динамически генерировать имена методов в рельсах - PullRequest
2 голосов
/ 15 июня 2010

Мне нужно генерировать ссылки в моих представлениях с помощью помощников URL, таких как user_path (@user), суть в том, что в некоторых случаях я не знаю, для какой модели я создаю эту ссылку, т.е. является ли она пользователем илимагазин или что-то еще

Я хотел бы иметь возможность определить это на лету и вызвать соответствующий помощник вида, в настоящее время я делаю следующее, но мне интересно, есть ли более сухой способ сделать это.

if object.class == "Store"
   store_path(object)
elsif object.class == "User"
   user_path(object)
...etc

Ответы [ 2 ]

5 голосов
/ 15 июня 2010

Конечно, используйте send для динамического выбора имени метода

send("#{object.class.name.downcase}_path", object)
2 голосов
/ 15 июня 2010

url_for(object) делает то, что вам нужно:

Если вы вместо хеша пропустите запись (например, активная запись или активная Ресурс) в качестве параметра параметров, Вы будете запускать названный маршрут для эта запись. Поиск произойдет на Название класса. Так прохождение Workshop объект будет пытаться использовать workshop_path маршрут.

Если вы используете link_to, тогда вы можете просто передать объект как URL:

<%= link_to 'Title', object %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...