Rails路由与日期

我的问题是关于在rails应用程序的路由中按日期使用filter,目前我已经准备好了匹配routes.rb文件中日期模式的规则,它看起来像这样:

match "itineraries/:day/:month/:year" => "itineraries#index", :constraints => { :year => /\d{4}/, :month => /\d{2}/, :day => /\d{2}/ } match "itineraries/new/:day/:month/:year" => "itineraries#new", :constraints => { :year => /\d{4}/, :month => /\d{2}/, :day => /\d{2}/ } resources :itineraries match '/:controller(/:action(/:id))' root :to => "itineraries#index" 

那个匹配例如/ itineraries / 01/01/2011,问题来自我从资源生成路由,例如,itineraries_path(:year => 2011,:month => 1,:day => 1)生成:

/行程?天= 1个月= 1&year2011

代替

/行程/ 01/01/2011

有没有办法将匹配规则放在资源映射中?

好吧,简短回答是你的路线确实存在,但它尚未命名(检查rake路线以说服自己)这就是为什么你不能像那样调用它(使用itineraries_path

所以,正确的方法是例如:

 match "itineraries/:day/:month/:year" => "itineraries#index", :constraints => { :year => /\d{4}/, :month => /\d{2}/, :day => /\d{2}/ }, :as => "itineraries_date" 

(注意:as一部分)

现在,如果你打电话给itineraries_date_path(11,12,1998)它会给你的itineraries/11/12/1998 itineraries_date_path(11,12,1998) itineraries/11/12/1998