goals do
model_diagram header: 'Topics', fields: %w(id title description)
message "The suggestotron has a list of topics that people can vote on. We'll store our topics in the database. In this step you'll do the following:"
goal "Create a simple *Table* in the database for topics with a title and a description"
goal "Automatically generate the corresponding *Scaffold* in Rails (namely, the *Model*, the *View*, and the *Controller*)."
end
steps do
step do
option "Without Docker" do
console "rails generate scaffold topic title:string description:text"
end
option "With Docker" do
console "docker-compose run web rails generate scaffold topic title:string description:text"
end
end
message <<-MARKDOWN
* `generate scaffold` tells Rails to create everything necessary to get up and running with topics.
* `topic` tells Rails the name of the new model.
* `title:string` says that topics have a title, which is a "string".
* `description:text` says that topics have a description which is a "text". A "text" is like a "string" that might be very long.
MARKDOWN
step do
option "Without Docker" do
console "rails db:migrate"
end
option "With Docker" do
console "docker-compose run web rails db:migrate"
end
end
message "This tells Rails to update the database to include a table for our new model."
end
explanation do
h2 "Databases don't create tables by themselves - they need instructions."
message <<-MARKDOWN
One of the files the scaffold command created will be named something like
`db/migrate/20140515115208_create_topics.rb`. The numbers in the name are
the date and time the file was made, so yours will be named differently.
The file contains Ruby code that describes what the table will look like.
This is called a migration file. It tells the database how to transform
itself into the new configuration.
```ruby
class CreateTopics < ActiveRecord::Migration
def change
create_table :topics do |t|
t.string :title
t.text :description
t.timestamps
end
end
end
```
`rails db:migrate` is a task provided by the Rails framework. It uses the migration file we just created (`db/migrate/201xxxxxxxxxxx_create_topics.rb`) to change the database.
`docker-compose run web <commands>` is a way to run commands in docker web service we specified in `docker-compose.yml` earlier.
MARKDOWN
end
explanation do
message <<-MARKDOWN
Here, `rails db:migrate` is a command provided by the Rails framework. It uses the migration file we just created (`db/migrate/201xxxxxxxxxxx_create_topics.rb`) to change the database. Database migration files can be crucial to code collaboration.
`docker-compose run web <commands>` is a way to run commands in docker web service we specified in `docker-compose.yml` earlier.
MARKDOWN
tip "You can run `rails -T` to see a list of all the `rails` commands your app currently responds to, along with a short description of each task."
end
next_step "CRUD_with_scaffolding"