rails的url_for方法是用的很广,这里主要讨论的actioncontroller中的urlwriter的部分实现。
rails的url_for调用的是Routting::Routes.generate(options,{})。该方法把url的生成分为两个部分即path和后面的参数的生成。参数生成主要采用cgi.escap(param),将每个参数都这样生成最后采用数组的方法Array * '&'(等同于Array.join('&'))。
path的生成比较复杂主要使用segment生成,segment是加载routes.rb后为每条规则写的数据组成。具体实现比较复杂,我现在也就了解一部分,主要是生成加载的生成,但是怎么进行查询加载比如url_for的实现仍然不清楚,希望大家谁对这部分了解可以给我帮助。
使用url_for和routes.rb能够给我的设计带来方便,查询的规则和你在routes.rb
写的顺序有关,例如使用规则进行seo。我们知道一个网站的相同的内容最好只有一个url,但是我们的will_paginate的首页的url会生成?page=1和我们的默认页的url很可能不同,我们这里使用两条规则,第一条首页规则,给予默认的page=1,第二条分页规则,我们的will_paginate主要使用的就是url_for,分页时首页查找会用第一条规则,其余的会使用第二条规则,从而达到我们的目的。
rails的url_for调用的是Routting::Routes.generate(options,{})。该方法把url的生成分为两个部分即path和后面的参数的生成。参数生成主要采用cgi.escap(param),将每个参数都这样生成最后采用数组的方法Array * '&'(等同于Array.join('&'))。
path的生成比较复杂主要使用segment生成,segment是加载routes.rb后为每条规则写的数据组成。具体实现比较复杂,我现在也就了解一部分,主要是生成加载的生成,但是怎么进行查询加载比如url_for的实现仍然不清楚,希望大家谁对这部分了解可以给我帮助。
使用url_for和routes.rb能够给我的设计带来方便,查询的规则和你在routes.rb
写的顺序有关,例如使用规则进行seo。我们知道一个网站的相同的内容最好只有一个url,但是我们的will_paginate的首页的url会生成?page=1和我们的默认页的url很可能不同,我们这里使用两条规则,第一条首页规则,给予默认的page=1,第二条分页规则,我们的will_paginate主要使用的就是url_for,分页时首页查找会用第一条规则,其余的会使用第二条规则,从而达到我们的目的。