resources :photos do
match 'preview', to: 'photos#preview', on: :new, via: :get
match 'preview', to: 'photos#preview', on: :member, via: :get
match 'preview', to: 'photos#preview', on: :collection, via: :get
end
也等同于如下书写方法
resources :photos do
member do
match 'preview', to: 'photos#preview', via: :get
end
end
Prefix
Verb
URIPattern
Controller#Action
preview_new_photo
GET
/photos/new/preview(.:format)
photos#preview
preview_photo
GET
/photos/:id/preview(.:format)
photos#preview
preview_photos
GET
/photos/preview(.:format)
photos#preview
:constraints
可以使用正则表达式或者一个可以响应matches?方法的对象来对参数进行约束
match 'account/setting/:id', constraints: {id: /[A-Z]\d{5}/}, to: 'account#setting', via: :get # 约束 /account/setting/A12345
match 'account/setting', constraints: { format: 'json' }, to: 'account#setting', via: :get # 这个不是太懂!
class Whitelist
def matches?(request) request.remote_ip == '1.2.3.4' end
end
match 'account/setting', to: 'account#setting', constraints: Whitelist.new, via: :get
Prefix
Verb
URIPattern
Controller#Action
GET
/account/setting/:id(.:format)
account#setting {:id=>/[A-Z]\d{5}/}
account_setting
GET
/account/setting(.:format)
account#setting {:format=>"json"}
preview_photos
GET
/account/setting(.:format)
account#setting
:defaults
设置默认params的值
match 'account/setting', to: 'account#setting', defaults: { id: 'hello' }, via: :get
路由相关的类和模块在命名空间 ActionDispatch::Routing::Mapper中, 这里我给一个它的链接方便在学习时查看
match
匹配一个URL模式到一个或多个路由
基础使用
带参数的路由
在路由匹配中使用通配符并且映射到
params
中上面的通配符路由会将
songs/rock/classic/stairway-to-heaven
路径做匹配和映射路由映射到 controller 和 action的几种写法
除了以上
match
的几种使用方法外, 还可以指定兼容Rack
方式的路由match options
:controller
路由对应控制器名称
:action
路由对应控制器里的方法名称
:param
可以用于覆盖资源默认的
:id
参数, 一但覆盖你可以在控制的方法中使用params[:param]
去访问嗯我们看到之前默认
:id
已经被替换为了:title
为了更好配合上面路由的使用方法, 你还可以覆盖对应模型的
to_param
方法, 去构造符合路由的url:path
路由的前缀
:module
控制器的命名空间, 这里暂时还没懂. 稍后补上
:as
设置生成路由辅助函数的名称
通过上面的输出可以看出, 我们将
account_as/setting_as
路由的生成函数定义为了setting
, 在代码中就可以这样使用setting_url
setting_path
:via
定义路由所匹配的动作(verbs), 相关动作资料可以看这里
:on
可以为resource(s)定义的资源增加
:member
,:collection
,:new
路由. 请注意这个必须在resource(s)
的do语句块中使用也等同于如下书写方法
:constraints
可以使用正则表达式或者一个可以响应
matches?
方法的对象来对参数进行约束:defaults
设置默认
params
的值params输出:
<ActionController::Parameters {"id"=>"hello", "controller"=>"account", "action"=>"setting"} permitted: false>
总结:以上我们学会了
match
方法的基础使用和它的一些选项,在往后的使用中更能得心应手。关于get
,post
,delete
,put
其实也是调用的match
方法感谢阅读