Rails route constraints api 介绍
constraints(:ip => /192.168.\d+.\d+/) do resources :postsend?可以提供一个ip或者一个ip地址的范围进行限制,一旦检测到用户的ip地址符合限制范围,则会告知不存在此route。
匹配动态请求
这个例子是控制route只能被iPhone访问。
1,第一种做法,传递block,如下:
constraints(lambda { |req| req.env["HTTP_USER_AGENT"] =~ /iPhone/ }) do resources :iphonesend通过传入一个block的方式来匹配HTTP_USER_AGENT是否匹配iPhone,如果是true则可以访问iphones这个资源路径。
class Iphone def self.matches?(request) request.env["HTTP_USER_AGENT"] =~ /iPhone/ endend
constraints(Iphone) do resources :iphonesend这样我们就可以把逻辑全部放在Iphone了
参考资料: ?
? ?例子实现: ?https://gist.github.com/bsodmike/1369419
? ?Rails Guide: http://guides.rubyonrails.org/routing.html#segment-constraints
? ?同时如果你觉得在本文中介绍太简单,可以移步官方源码实现,并且附带有此api的详细guides:
??https://github.com/rails/rails/blob/7c7fb3a862651d87c4071e40a1799b973f626b11/actionpack/lib/action_dispatch/routing/mapper.rb#L693
?
?
?
?