Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 884443
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 15, 20262026-05-15T12:45:05+00:00 2026-05-15T12:45:05+00:00

Hey! I am trying to set up routes in a Rails application so that,

  • 0

Hey! I am trying to set up routes in a Rails application so that, depending on the type of parameter passed, Rails sends the request to a different action.

I have courses which have an attribute state which is a string with a two letter state abbreviation. When a user visits /courses/1, I want Rails to display the show action in the courses controller (and pass the parameter as :id). When a user visits /courses/CO though, I want Rails to display the index action and pass the parameter as :state.

So /courses/1 would be equivalent to

:controller => 'courses', :action => 'show', :id => '1'

And /courses/CO would be equivalent to

:controller => 'courses', :action => 'index', :state => 'CO'

I have tried this:

map.resources :courses, :except => { :index, :show }
map.connect 'courses/:state', :controller => 'courses', :action => 'index', :state => /[A-Z]{2}/
map.connect 'courses/:id',    :controller => 'courses', :action => 'show', :id => /[0-9]+/

But it breaks (the rails server wont even start). I don’t usually do things like this with routes, so I am outside of my know-how. Thanks!

Edit: Fixed a typo, thanks JC.

Current solution looks like this:

map.resources :courses, :except => [ :index, :show ]
  map.courses  '/courses',        :controller => 'courses', :action => 'index', :state => 'AL', :method => :get
  map.courses  '/courses/:state', :controller => 'courses', :action => 'index', :requirements => { :state => /[A-Z]{2}/ }, :method => :get
  map.course   '/courses/:id',    :controller => 'courses', :action => 'show',  :requirements => { :id => /[0-9]+/      }, :method => :get
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-15T12:45:06+00:00Added an answer on May 15, 2026 at 12:45 pm

    This works, but you will need to go edit all your links to the index to say things like courses_path('AA') and you won’t be able to use some of the nice helpers, like form_for, which assume you are following the convention that #create is simply #index with a POST request. (Get comfortable with form_tag)

    ActionController::Routing::Routes.draw do |map|
      map.resources :courses, :except => [ :index, :show ]
      map.courses  '/courses/:state', :controller => 'courses', :action => 'index', :requirements => { :state => /[A-Z]{2}/ } , :method => :get
      map.course   '/courses/:id',    :controller => 'courses', :action => 'show',  :requirements => { :id => /[0-9]+/      } , :method => :get
    end
    

    It will keep your routes named the same, though.

    (by the way, your /co does not match your regex, which requires upper case chars)


    Fun aside: Do we really need the abstraction of a router? http://blog.peepcode.com/tutorials/2010/rethinking-rails-3-routes

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Hey, I'm trying to set variables in my CSS so that I can allow
Hey I'm trying to figure out how to convert a statement that works in
Hey all. I'm trying to set a value on a hidden form element based
Hey guys im having a problem trying to program out a set of logic.
Hey, I was trying to delete an item form a list (without using set
Hey All you out there, I am trying to write a query that sums
Hey, I am trying to build a set of ranges in python like so:
Hey I have a radiobuttonlist and trying to set one of the radiobuttons to
Hey, all. I'm currently trying to set up FTP support for my ANT (version
Hey guys i'm trying to build a little app that pulls in the users

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.