Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails Routes With Query Parameters

Not really sure the terminology involved, I didn't find anything searching but if someone can point me in the right direction I'll take another look.

I have a controller called Journals. I would like to have a date optionally part of the URL. If the user doesn't specify a date, they get today. If there is a date specified, then it is used. URLs would look like:

localhost:3000/journals/7/
localhost:3000/journals/7/2013-01-22/

The first would show Today's contents. The second would show contents from the Jan 22.

I started with this route:

match '/journals/:id(/:date)', to: 'journals#show'

And a corresponding Controller

class JournalsController < ApplicationController
  def show
      @user = User.find(params[:id])
      if params[:date]
        @date = Date.parse(params[:date])
      else 
        @date = Date.today
      end
  end  
end

And this works fine, but how can I generate URLs using the url helpers? I tried this:

<%= link_to "< Yesterday", journal_path(id: @user, date: @date.yesterday) %>

Which seems to actually work fine, but it gives me a url like this:

localhost:3000/journals/7?date=2013-01-22

instead of:

localhost:3000/journals/7/2013-01-22

How can I keep the URLs consistently built like /journals/:id/:date

If there is a better approach please let me know.

like image 939
Nicholas Smith Avatar asked Jan 30 '13 17:01

Nicholas Smith


1 Answers

Try this in routes:

 resources :journals
 match '/journals/:id(/:date)' => 'journals#show', :constraints => { :date => /\d{4}-\d{2}-\d{2}/ }, :as => "journals_date"
like image 111
Rahul Tapali Avatar answered Sep 28 '22 05:09

Rahul Tapali