Как url_for (@workshop) становится "/ Workshop / 5"? - PullRequest
1 голос
/ 08 октября 2009

Если вы вызываете url_for на модельном объекте:

<%= url_for(@workshop) %>

Документы для url_for говорят, что он вызывает @workshop.to_s, что приводит к:

/workshops/5

But if I just call to_s on the model, I don't get the route - как url_for делает это ?

Ответы [ 2 ]

3 голосов
/ 08 октября 2009

Внутри ActionController он вызывает метод polymorphic_url. По сути, он проверяет тип объекта @workshop и использует его, а также его идентификатор для построения маршрута. Таким образом, если @ workshop.class = Workshop, rails может выполнить для этого случай to_s.downcase, а затем начать строить маршрут на основе других параметров url_for и действия. Код находится в модуле PolymorphicRoutes в источнике рельсов.

1 голос
/ 08 октября 2009

Я не знаю достаточно ruby ​​или rails, чтобы подвергать сомнению документацию, но в действительности происходит то, что он вызывает @workshop.id.to_s, чтобы получить 5 (id является первичным ключом в базе данных). Для прямого вызова Workshop.to_s вы получите ссылку на объект памяти.

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