---
goals {
message <<-MARKDOWN
At the core, most database driven web sites are the same. They need to store records and provide a way to do the following:
* **C**reate new records in the database
* **R**ead or show the records in the database
* **U**pdate existing records
* **D**estroy or delete records
Because these 4 actions (CRUD) are so common, Rails includes the scaffold command to make creating them easier.
MARKDOWN
}
steps {
step {
message "Point your browser to [http://localhost:3000/topics](http://localhost:3000/topics)"
message "You should see the \"Topics\" page with headers for title and description, and a link to add a new topic:"
img src: "img/topic_list_page.png", alt: "Screenshot of topic list page"
}
step {
message <<-MARKDOWN
* Click "New Topic"
* Fill in the form and click "Create Topic"
* You should see a page showing your new topic with a message that your topic was successfully created:
![Screenshot of topic detail page with confirmation message](img/topic_created.png)
MARKDOWN
}
step {
message <<-MARKDOWN
* Click "Back to topics"
* You should see the topic list again, this time with your new topic listed:
![Screenshot of topic list with new topic](img/list_with_topic.png)
* Try the "Show this topic" link to see what it does
* Try the "Edit this topic" link on the "show" page to see what it does
* Try the "Destroy this topic" button on the "show" page to see what it does
MARKDOWN
}
}
explanation {
message <<-MARKDOWN
How did all those pages get created and hooked together? The Rails scaffold did it for you.
Let's take a closer look at some of the files Rails created:
* `app/controllers/topics_controller.rb`
* This is the controller file that Rails created as part of the scaffold
* If you look inside, you'll see a method (a line beginning with
<code>def</code>) for each of the views listed below.
* `app/models/topic.rb`
* This file contains code for our topic model. If you look inside,
it's nearly blank. Creating, reading, updating, and deleting
records are built into Rails.
* `app/views/topics`
* This folder contains all the views for our topics model. This is
where the HTML for the pages you used is stored.
* If you've written HTML before, many lines in the views should
look familiar. Rails views are HTML with some extra code added
to display data from the database.
* `app/views/topics/_topic.html.erb`
* This file is used in several places to display the one topic.
It is called a partial since it only contains code for part of a page. Partials
always have filenames starting with an underscore character.
* `app/views/topics/index.html.erb`
* This is the code for the page that lists all the topics.
* It uses the `_topic.html.erb` partial to display each topic.
* Index is the name given to the "default" page for a web site or a
section of a web site. When you navigate to
http://localhost:3000/topics the topics index page is what is
sent to your computer.
* `app/views/topics/show.html.erb`
* This is the page you get when you click the "Show" link on the
"Listing topics" page.
* It uses the `_topic.html.erb` partial to display one topic.
* `app/views/topics/new.html.erb`
* This is the page you get when you click "New topic".
* `app/views/topics/edit.html.erb`
* This is the page you get when you click "Edit this topic".
* `app/views/topics/_form.html.erb`
* This partial contains the form. It is used in both `new` and `edit`.
* Challenge question: Can you find the line of code in new.html.erb
and edit.html.erb that makes the form partial appear?
MARKDOWN
}
next_step "setting_the_default_page"