Rails 研究一下路由的问题

ery · 2012年03月19日 · 最后由 azhao 回复于 2012年03月23日 · 3387 次阅读

路由代码定义如下:

Funny::Application.routes.draw do
  get 'list' => 'sales#index'
  resources :sales do
    get 'preview', :on => :member
  end
end




第一个问题

get 'list' => 'sales#index'
get 'preview', :on => :member







这个两个 get 函数是同一个函数吗?

第二个问题 请问,这个 get 函数,定义在 rails 的哪个文件里面,以及是哪一行?(请顺便写出 rails 版本)

第三个问题

get 'preview', :on => :member 会生成一个 helper 方法,名字是 preview_sale_path 在这次函数调用中,并没有和sale有关的信息, get函数是如何获取sale信息的?

当然,我们都知道是resources :sales搞得鬼, 但是我的问题是,是resources函数中的哪一段代码搞得鬼?

你可以去http://api.rubyonrails.org/ 搜索这两个函数,在 ActionDispath 里面。每个函数的文档最后有个 on Github,会带你到源代码

#1 楼 @cqpx 你的意思是这个两个 get 函数,是同一个 get 函数吗?

#2 楼 @ery 我是在回答你的第二个问题。第一个问题你可以去源码里研究。我没仔细看,我猜它俩是一个函数

关于第二个问题

rails 3.2.2 中 应该是 https://github.com/rails/rails/blob/2e533e3435f6c7e3cd7503b7f997344edd39f1c7/actionpack/lib/action_dispatch/routing/mapper.rb#L466

/actionpack/lib/action_dispatch/routing/mapper.rb line:466

关于第一个问题, 我研究后发现,两个 get 函数,的确是同一个函数。

#3 楼 @cqpx 请看看第三个问题,谢谢

非常复杂的逻辑啊,没头绪中。。。

#9 楼 @vkill #8 楼 @clc3123 的确有点复杂。 不过,这样才有意思吗。

这个问题,最好通过 Debug/Pry 的方式进行研究,直接阅读源码,恐怕很难搞清楚。

第三个是原因 resources :sales do

#12 楼 @azhao A good answer, but, “是 resources 函数中的哪一段代码搞得鬼?”

对这个问题,感兴趣的人,怎么这么少啊? 我一直很好奇,get函数是如何拿到resources函数的配置信息的。

因为这个问题,很难理解,更难说出来。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号