Setting The Default Page
Goals
Now that the structure is complete, let's make the flow work smoothly.
Currently when you go to http://localhost:3000 you see the "Welcome aboard" message.
It would be easier to use our app if http://localhost:3000 went directly to the topics list.
In this step we'll make that happen and learn a bit about routes in Rails.
Steps
Step 1: Add a root route
Open the file
config/routes.rb
in an editor.Search the file for root, it should be near the top if you are using Rails 4.
Uncomment the line that contains the example command by removing the
#
sign in front of it, and change it to readroot 'topics#index'
. When you are done the line should look like this:root 'topics#index'
(Rails 3.x users should add
root to: 'topics#index'
and will need to remove theirpublic/index.html
file).Step 2: Confirm your changes
Go back to http://localhost:3000/. You should be taken to the topics list automatically.
Explanation
root 'topics#index'
is a rails route that says the default address for your site istopics#index
.topics#index
is the topics list page (the topics controller with the index action).- Rails routes control how URLs (web addresses) get matched with code on the server. Similar to how addresses match with houses and apartments.
- The file
config/routes.rb
is like an address directory listing the possible addresses and which code goes with each one
routes.rb
uses some shortcuts so it doesn't always show all the possible URLs. To explore the URLs in more detail we can use the terminal.At the terminal type
rake routes
. You should get something that looks like this:$ rake routes Prefix Verb URI Pattern Controller#Action topics GET /topics(.:format) topics#index POST /topics(.:format) topics#create new_topic GET /topics/new(.:format) topics#new edit_topic GET /topics/:id/edit(.:format) topics#edit topic GET /topics/:id(.:format) topics#show PATCH /topics/:id(.:format) topics#update PUT /topics/:id(.:format) topics#update DELETE /topics/:id(.:format) topics#destroy root GET / topics#indexThis shows all the URLs your application responds to. The code that starts with colons are variables so :id means the id number of the record. The code in parenthesis is optional.
In Rails 4, you can also get this information on your site in development. Go to http://localhost:3000/rails/info and you'll see something like this:
You'll also see that table in Rails 4 whenever you try to access an invalid route (try http://localhost:3000/sandwich)
Exploring Routes (optional)
Now you can have a look at the paths that are available in your app. Let's try looking at one of the topics routes we just generated. Open up your rails console and play:
$ rails console >> app.topics_path => "/topics" >> app.topics_url => "http://www.example.com/topics"
app
is a special object that represents your entire application. You can ask it about its routes (as we just did), play with its database connections, or make pseudo-web requests against it withget
orpost
(and lots more).Don't forget to exit the console before proceeding:
>> exitExcellent! You've learnt about routes and you're about to send your app out to the Internetz!
Stand up. High five the person next to you. Excellent.
Short recap
Find a partner and pair to describe the steps and what you've just done. Use sticky notes and paper.
Write down things that you're unsure about too, then get a teacher to help you understand.
Deploying
Before the next step, you could try deploying your app to Heroku!
Go on to Deploying To Heroku
Next Step:
Go on to Voting On Topics