# 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

Hello my name is King

I make Rails apps.

``` ## 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
<% @messages.each do |message| %>

<%= message.content %>

<%= message.created_at %>

<% end %> <%= link_to 'New Message', "messages/new" %>
``` Open: app/views/messages/new.html.erb ```html
<%= form_for(@message) do |f| %>
<%= f.label :message %>
<%= f.text_area :content %>
<%= f.submit "Create" %>
<% end %>
``` ## 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