Ruby on Railsの基本

### アプリケーション作成
    $ rails new アプリケーション名

### サーバーを用意
    $ rails server

### コントローラ＆ビュー作成
    # localhost:3000/home/top
    $ rails generate controller home top #homeはコントローラ名、topはアクション名
    
### ルーティング
    config/routes.rb
    get '/top' => 'home#top' #localhost:3000/top

### 名前付きルートとは
    $ rake routes

上記を行うことによってわかる名前に_pathをつけたもの。    

自分で名付けることもできる

    config/routes.rb
    get 'notes/:id' => 'notes#show', as: 'note' #as: '名前'で名付けることができる

上記の場合は、`note_path`となる

### URLとVerbによりアクションは変わる
- Verb    
post(作成)/get(取得)/patch(更新)/delete(削除)    

- post    
フォームによってリクエストを送信した場合はデフォルトでVerbはPOSTになります    

- get    
直接URLを入力した場合のリクエストと、リンクによるリクエストではデフォルトでVerbはGETになります。
    
### <% %>と<%= %>の違い
- <% %> => erbにhtmlに出力されない(ビューではなくコントローラに書く)
- <%= %> => erbにhtml出力される

### コントローラで定義した変数をビューで使う
 例
 
    class HomeController < ApplicationController
        def top
            @message = "Hello World" #変数に@をつける
        end
    end
    
    # localhost:3000/top
    <%= @message %> #Hello World

### リンクの作成
    #{}は省略可能
    <%= link_to "表示するテキスト", "URL", { id: "id名", class: "class名" } %>
    <%= link_to "表示するテキスト", "名前_path" %> #名前付きリンク
    
### ルートの設定
 config/routes.rb
 
    root 'home#top' # localhost:3000

### viewの共通部分
    app/views/layouts/application.html.erb

 - application.html.erbのheadには、application.jsとapplication.cssが読み込まれており、
 assets内の全てのjs/cssファイルを読み込んでいることと同義
 - ` <%= yield %> ` に個別に書かれた内容が入る

### フォーム作成
    <%= form_tag 送信先URL do %>
        <input type = "text" name = "title" value = "hoge">
        <textarea name = "content">hoge</textarea>
        <input type = "submit" value = "投稿する">
    <% end %>
    
    <%= form_tag 送信先URL do %>
        <%= text_field_tag :title,"hoge" %>
        <%= text_area_tag :content, "hoge"%>
        <%= submit_tag "投稿する" %>
    <% end %>

### フォームからの値の受け取り方
    def create
        @title = params[:title] #paramsというハッシュからtitleをキーに持つ値を取り出す
    end

- ハッシュとは(配列との違い)    
配列とハッシュの違いを確認しておくと、配列は複数のオブジェクトを順に並べて先頭から番号を割り当てたものです。それに対してハッシュはバラバラの位置に配置したオブジェクトに目印となるキーが付いていると考えて下さい。

### モデルとデータベースの作成
- モデルとは    
コントローラから命令され、データベース操作するもの。

`#titleとcontentを保存するためのNoteモデルを作成`
   ` $ rails generate model Note title:string content:text`
    
    #データベースの生成
    $ rake db:migrate

- データ型    
string:短い文字列、text:長い文字列

### データベースにデータを保存
例    

    def create
        @note = Note.new # Noteクラス(Noteモデル)のインスタンス生成
        @note.title = params[:title] #セッターを利用しNoteのインスタンス変数に値をセット
        @note.content = params[:content]
        @note.save　#savaメソッドを飛び出しデータベースに保存
    end

### データベースのデータを更新
例    
    ビュー側    
    `<%= form_tag update_note_path(@note.id), method:'patch' do %>`
    
    #コントローラ側
    def update
        @note = Note.find(params[:id]) # Noteの中からidに合致したデータを持ってくる
        @note.title = params[:title] # 上書き
        @note.content = params[:content]
        @note.save
    end

### データベースのデータを削除
    #routes.rb
    delete '/notes/:id' => 'notes#destroy', as: 'deatroy_note'
    
    #リンク
    <%= link_to '削除する', destroy_note_path(@note.id), method:'delete' %>
    
    #コントローラ
    def destroy
        @note = Note.find(params[:id])
        @note.destroy
    end


### データベース構造の確認

    $ rails console
    
    DB名.all #例:Note.all
    
    quit #console機能終了

### gemとは
「gem」とは、便利な機能を集めたRubyのプログラムのことです。gemを使うと、複雑な機能を簡単に実装できるので非常に便利です。Gemfileというファイルに必要なgemを書き、「bundle install」コマンドでインストールできます。

    $ bundle install
    
### おすすめgem
    source 'https:#rubygems.org'

    # データを閲覧するときに見やすくしてくれる
    gem 'hirb', '0.7.3'

    # railsのgem
    gem 'rails', '4.2.1'

    # sqlite3データベースのgem
    gem 'sqlite3', '1.3.10'

    # SCSSスタイルシートのgem
    gem 'sass-rails', '5.0.3'

    # JavaScript assetの圧縮用のgem
    gem 'uglifier', '2.7.1'

    # CoffeeScriptのgem
    gem 'coffee-rails', '4.1.0'

    # jQueryのgem
    gem 'jquery-rails', '4.0.3'

    # Turbolinksのgem
    gem 'turbolinks', '2.5.3'

    # rails consoleを使いやすくするgem
    gem 'pry-rails', '0.3.4'

    # hirbの出力を日本語に対応させるgem
    gem 'hirb-unicode'

### データベースの内容をビューに一覧表示
    #コントローラ側
    def index
        @notes = Note.all #noteテーブルのデータを全部取得
    end    
    
    #ビュー側
    <% @notes.each do |note| %>
        <%= note.title %>
    <% end %>

### findメソッド
- モデル名.find()    
`Note.find(1) #id:1のデータを取得する`

### アクション
> <img width="460" alt="スクリーンショット 2016-02-16 7.32.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/69159/fdc39bea-0437-4a41-3097-14d5737a8c9c.png">
出典:Progate