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

deb*_*deb 3 routes ruby-on-rails

我应该何时使用:条件或:rails路由中的要求?

这是两个例子:

:条件

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

:要求

 map.connect 'posts/index/:page',
            :controller => 'posts',
            :action => 'index',
            :requirements => {:page => /\d+/ },
            :page => nil
 end
Run Code Online (Sandbox Code Playgroud)

Jor*_*ing 10

唯一的选择:conditions:method(即:get,:post等),让您限制可以使用哪些方法来访问路由:

map.connect 'post/:id', :controller => 'posts', :action => 'show',
            :conditions => { :method => :get }
Run Code Online (Sandbox Code Playgroud)

:requirements另一方面,允许您指定参数必须匹配的正则表达式,例如,如果参数是邮政编码,您可以为其提供仅与邮政编码匹配的正则表达式:

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

(你甚至可以删除:requirements并使用这个较短的表格:)

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

ActionController :: Routing中查看"Route conditions"和"Regular Expressions and parameters" ,我从中偷走了上面的例子.