Rails路由:条件和路由要求之间有什么区别?

时间:2009-12-07 19:40:49

标签: ruby-on-rails routes

我应该何时使用:条件或: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

1 个答案:

答案 0 :(得分:10)

唯一的:conditions选项是:method(即:get:post等),让您限制可以使用哪些方法来访问路线:< / p>

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中的“路线条件”和“正则表达式和参数”,我从中偷走了上面的例子。