Rails routes with date

2019-08-05 20:30发布

问题:

My question it's about use a filter by date in the route of a rails application, at the moment I all ready have the rule that match the pattern of the date in the routes.rb file, it's looks like this:

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"

That match for example /itineraries/01/01/2011, the problem comes when I generate a route from the resource, for example, itineraries_path(:year=>2011,:month=>1,:day=>1) generate:

/itineraries?day=1&month=1&year2011

instead of

/itineraries/01/01/2011

Is there a way to put the match rule inside the resource mapping?

回答1:

well, short answer is your route does exists, but it's not named yet (check rake routes to convince yourself) and that's why you can't call it just like that (using itineraries_path)

so, the correct way to do it would be for example:

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

(notice the :as part)

now, if you call itineraries_date_path(11,12,1998) it will give you itineraries/11/12/1998