如果您在模型对象上调用url_for
:
<%= url_for(@workshop) %>
docs for 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如何做到这一点?
答案 0 :(得分:3)
在ActionController内部,它调用一个名为polymorphic_url的方法。基本上,它检查@workshop所使用的Object类型,并使用它加上其ID来构造路由。因此,如果@ workshop.class = Workshop,rails可以对其执行to_s.downcase,然后根据其他url_for选项和操作开始构建路由。代码位于rails源中的PolymorphicRoutes模块中。
答案 1 :(得分:1)
我不太了解ruby或rails来质疑文档,但实际发生的是它正在调用@workshop.id.to_s
来获取5(id是数据库中的主键)。直接调用Workshop.to_s将获得对象的内存引用。