url_for(@workshop)如何成为“/ workshop / 5”?

时间:2009-10-08 15:43:46

标签: ruby-on-rails

如果您在模型对象上调用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如何做到这一点

2 个答案:

答案 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将获得对象的内存引用。