Ruby on rails (@workshop)的url_如何变成“/workshops/5”?

Ruby on rails (@workshop)的url_如何变成“/workshops/5”?,ruby-on-rails,Ruby On Rails,如果在模型对象上调用url_: <%= url_for(@workshop) %> 但是,如果我只是在模型上调用_s,我就不知道该怎么做了——url是如何做到这一点的?我对ruby或rails了解不够,无法质疑文档,但真正发生的是,它调用@workshop.id.to_s来获取数据库中的主键id。调用direct Workshop.To___________________________________________________________。调用Direct Works

如果在模型对象上调用url_:

<%= url_for(@workshop) %>

但是,如果我只是在模型上调用_s,我就不知道该怎么做了——url是如何做到这一点的?

我对ruby或rails了解不够,无法质疑文档,但真正发生的是,它调用@workshop.id.to_s来获取数据库中的主键id。调用direct Workshop.To___________________________________________________________。调用Direct Workshop.To将获得对象的内存引用。

在ActionController中,它正在调用一个名为多态url的方法。基本上,它检查@workshop是什么类型的对象,并使用它加上它的ID来构造路由。因此,如果@workshop.class=workshop,rails可以在这个问题上做一个to_.downcase,然后开始基于其他url_构建路由,用于选项和操作。代码位于rails源代码中的模块polymorProutes中。

在ActionController中,它正在调用一个名为polymorphic\u url的方法。基本上,它检查@workshop是什么类型的对象,并使用它加上它的ID来构造路由。因此,如果@workshop.class=workshop,rails可以在这个问题上做一个to_.downcase,然后开始基于其他url_构建路由,用于选项和操作。代码在rails源代码的模块中。

我认为它实际上调用了对象上的参数。如果你想让这个URL有一个seo友好的URL,例如,或者任何不是记录id的东西,那么你可以克服这个问题。我认为它实际上调用了你对象上的参数。如果你想让URL具有搜索引擎优化友好的URL,例如,或者任何不是记录id的内容,那么你可以忽略这一点。为了澄清,我相信它会@workshop.class.to_.下划线,以防类名中有多个单词。例如:UserRole.class.to_.下划线='user_role'。再加上一个。多元化,你就可以走了!我只是想澄清一下,如果类名中有多个单词,我相信它会@workshop.class.to_.s.下划线。例如:UserRole.class.to_.下划线='user_role'。再加上一个。多元化,你就可以走了!
/workshops/5