2024-06-21
This commit is contained in:
220
Writerside/topics/rails-CheetSheet.md
Normal file
220
Writerside/topics/rails-CheetSheet.md
Normal file
@@ -0,0 +1,220 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user