2009-12-07 30 views
3

什么时候应该使用:条件或:轨道布线中的要求?Rails路由:条件和:路由中的要求有什么区别?

这里有两个例子:

:条件

map.connect "/foo/:view/:permalink", :controller => "foo", 
    :action => "show", :view => /plain|fancy/, 
    :permalink => /[-a-z0-9]+/, 
    :conditions => { :method => :get } 
end 

:要求

map.connect 'posts/index/:page', 
      :controller => 'posts', 
      :action => 'index', 
      :requirements => {:page => /\d+/ }, 
      :page => nil 
end 

回答

10

唯一的选择:conditions需要的是:method(即:get:post,等等),让你限制可以使用哪些方法访问路线:

map.connect 'post/:id', :controller => 'posts', :action => 'show', 
      :conditions => { :method => :get } 

:requirements,而另一方面,让你可以指定一个正则表达式的参数必须匹配,例如如果该参数是邮政编码,你可以给它一个正则表达式,只有邮政编码匹配:

map.geocode 'geocode/:postalcode', :controller => 'geocode', 
      :action => 'show', :requirements => { :postalcode => /\d{5}(-\d{4})?/ } 

(你甚至可以下降:requirements和使用较短的形式:)

map.geocode 'geocode/:postalcode', :controller => 'geocode', 
      :action => 'show', :postalcode => /\d{5}(-\d{4})?/ 

查看ActionController::Routing中的“路线条件”和“正则表达式和参数”,我从中盗取了上述示例。

+0

感谢您的快速回复。你太棒了。 – deb