[modelname] _path-method在哪里实现?

时间:2014-01-08 05:11:51

标签: ruby-on-rails ruby ruby-on-rails-4

有人可以告诉我这个方法分别在轨道4的幕后发生了什么?

由于

2 个答案:

答案 0 :(得分:0)

创建一个资源丰富的路由会向应用程序中的控制器和视图公开许多帮助程序(生成命名路由)。

就资源而言:照片:

photos_path returns /photos
new_photo_path returns /photos/new
edit_photo_path(:id) returns /photos/:id/edit (for instance, edit_photo_path(10) returns /photos/10/edit)
photo_path(:id) returns /photos/:id (for instance, photo_path(10) returns /photos/10)

这些助手中的每一个都有一个相应的_url助手(例如photos_url),它返回前缀为当前主机,端口和路径前缀的相同路径。

ActionDispatch :: Routing :: Mapper :: Base 模块负责生成这些帮助程序。 http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Base.html

我建议您查看导轨指南以进行布线。 http://guides.rubyonrails.org/routing.html

使用命令 rake routes ,您可以看到定义的所有路径的列表。

答案 1 :(得分:0)

有趣的位在类ActionDispatch::Routing::RouteSet中。添加命名路由(请参阅NamedRouteCollection#add)时,Rails将动态添加名为"#{route}_path"的方法(请参阅NamedRouteCollection::UrlHelper#define_named_route_methods)。

Rails内部使用define_method,它允许您在运行时动态定义方法。