Files
ruby-examples/docs/rails-CheetSheet.md

220 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ruby on Rails Cheatsheet
##### Table of Contents
[Basics](#basics)
[Connect a Database](#connect-a-database)
[Rake](#rake)
[Troubleshoots](#troubleshoots)
## Basics
#### request/response cycle
controller > route > view
learn request/response cycle: https://www.codecademy.com/articles/request-response-cycle-forms
#### 1. Generate a new Rails app
```bash
$ rails new MySite
# or using Postgress $ rails new myapp --database=postgresql
$ bundle install
$ rails server
> http://localhost:8000 # or similar Number up and running!
```
#### 2. Generate a controller and add an action
```
$ rails generate controller Pages
```
generates a new controller named Pages
Open: app/controllers/pages_controller.rb
```Ruby
class PagesController < ApplicationController
def home # add the home action/method to the pages controller
end
end
```
#### 3. Create a route that maps a URL to the controller action
Open: config/routes.rb
```Ruby
Rails.application.routes.draw do
get 'welcome' => 'pages#home'
end
```
#### 4. Create a view with HTML and CSS
Open: app/views/pages/home.html.erb
```html
<!-- write some html -->
<div class="main">
<div class="container">
<h1>Hello my name is King</h1>
<p>I make Rails apps.</p>
</div>
</div>
```
## Connect a Database
#### Example: messaging system:
#### 1. Generate a new Model
```
$ rails generate model Message
```
create model named Message. With two files: model file app/models/message.rb. Represents a table in database. Migration file db/migrate/. Way to update database.
Open: db/migrate/*.rb *The name of the migration file starts with the timestamp of when it was created
```Ruby
class CreateMessages < ActiveRecord::Migration
def change
create_table :messages do |t|
t.text :content # add this
t.timestamps
end
end
end
```
1. The change method tells Rails what change to make to the database. Here create_table method create a new table in database for storing messages.
2. t.text :content. Create text column called content in the messages tables.
3. t.timestamps is a Rails command that creates two more columns in the messages table called created_at and updated_at. These columns are automatically set when a message is created and updated.
Open: db/seeds.rb
```Ruby
m1 = Message.create(content: "We're at the beach so you should meet us here! I make a mean sandcastle. :)")
m2 = Message.create(content: "Let's meet there!")
```
Just to have dummy messages to load with db:seed
in Terminal run
```
$ rails db:migrate
$ rake db:setup
$ rake db:migrate
$ rake db:seed
```
updates the database with the new messages data model.
seeds the database with sample data from db/seeds.rb
#### 2. Generate a controller and add actions
```
$ rails generate controller Messages
```
Open: app/controllers/messages_controller.rb
```Ruby
class MessagesController < ApplicationController
# Rails defines standard controller actions can be used to do common things such as display and modify data.
# index, show, new, create, edit, update, and destroy
# code below is optional
def index
@messages = Message.all # retrieves all messages from database and stores them in variable @messages.
end
def new
@message = Message.new #
end
def create
@message = Message.new(message_params)
if @message.save
redirect_to '/messages'
else
render 'new'
end
end
private
def message_params
params.require(:message).permit(:content)
end
end
```
#### 3. Create a route that maps a URL to the controller action
Open: config/routes.rb
```Ruby
Rails.application.routes.draw do
get 'messages' => 'messages#index'
get 'messages/new' => 'messages#new'
post 'messages' => 'messages#create'
end
```
#### 4. Create a view with HTML and CSS
Open: app/views/messages/index.html.erb
```html
<div class="messages">
<div class="container">
<% @messages.each do |message| %>
<!-- iterates through each message in @messages created in the Messages controller's index -->
<div class="message">
<p class="content"><%= message.content %></p>
<p class="time"><%= message.created_at %></p>
</div>
<% end %> <%= link_to 'New Message', "messages/new" %>
<!-- Sets a link to the creation page -->
</div>
</div>
```
Open: app/views/messages/new.html.erb
```html
<div class="create">
<div class="container">
<!-- Create a form with a textarea field -->
<%= form_for(@message) do |f| %>
<div class="field">
<%= f.label :message %><br />
<%= f.text_area :content %>
</div>
<div class="actions"><%= f.submit "Create" %></div>
<% end %>
</div>
</div>
```
## Rake
```bash
rake db:create # Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databa...
rake db:drop # Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in...
rake db:fixtures:load # Load fixtures into the current environment's database
rake db:migrate # Migrate the database (options: VERSION=x, VERBOSE=false, SCOPE=blog)
rake db:migrate:status # Display status of migrations
rake db:rollback # Rolls the schema back to the previous version (specify steps w/ STEP=n)
rake db:schema:cache:clear # Clear a db/schema_cache.dump file
rake db:schema:cache:dump # Create a db/schema_cache.dump file
rake db:schema:dump # Create a db/schema.rb file that is portable against any DB supported by AR
rake db:schema:load # Load a schema.rb file into the database
rake db:seed # Load the seed data from db/seeds.rb
```
## Troubleshoots
4. When seeing only a blank page after running rails server:
http://stackoverflow.com/questions/25951969/rails-4-2-and-vagrant-get-a-blank-page-and-nothing-in-the-logs
5. Follow instructions to use postgres:
https://www.digitalocean.com/community/tutorials/how-to-setup-ruby-on-rails-with-postgres