首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Rails route constraints api 引见

2013-08-01 
Rails route constraints api 介绍constraints(:ip /192.168.\d+.\d+/) doresources :postsend?可以提

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这个资源路径。

但是第一方法比较粗暴,代码不够整洁,如果逻辑复杂,就显得啰嗦,所以可以选择第二种方法

2,第二种做法,传递一个Class,并且在这Class必须实现matches??方法。

我们事先在ib/constraints?定义一个Iphone Class:
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

?

?

?

?

热点排行