Rails　前半

見て頂きありがとうございます。
初心者ですので、間違っている場所があるかもしれませんが、
ご教示ください。お願いします。

rootは、localhost:3000にアクセスが来た場合のルーティングを意味する。
bootstrap の導入
gem 'bootstrap', '~> 4.0.0'（公式サイトで最新バージョンの確認が必要）
gem 'mini_racer'
bundle install

application.css のファイル名の変更
mv application.css application.scss
application.scssのファイルを開き
*= require_tree
*= require_selfを削除
@import "bootstrap";を追加

application.jsの編集
app/assets/javascripts/application.js
//= require jquery を　//= require jquery3に変更
bootstrapの機能を使うためには//= require jquery3の下に
//= require popper
//= require bootstrap-sprocketsを追加

マイグレーションファイルとは
データベースにテーブルを作成したり、既存のテーブルの定義を変更する場合などに使用

modelを作成するには
rails g model 作成するモデル名（単数形）　カラム：カラムの型
｛テーブル名は複数形｝
マイグレーションを実行するには rails db:migrate

RESTとは
・アプリケーションの設計方法の一つ
・HTTPメソッドを使ってWedもリソースを操作する際の設計方法
・Railsにおいてリソースとは、ユーザーや掲示板の情報など、主にデータベースのテーブルのデータのこと
（リソース：データベースに保存されているデータのこと）

ブラウザから送信するHTTPメソッドと役割
GET　　　　→　リソースの取得
POST 　　　→　リソースの作成
PATCH/PUT　→　リソースの更新
DELETE     →　リソースの削除

(例)
HTTPメソッド　　　パス　　         コントローラー♯アクション　　目的
GET　　　　　　　/boards　         boards#index　              掲示板の一覧表示
GET　　　　　　　/boards/new       boards#new                  掲示板を一つ作成するためのフォームを表示
POST             /boards           boards#create               掲示板を一つ作成
GET              /boards/:id       boards#show                 一つの掲示板の詳細を表示
GET              /boards/:id/edit  boards#edit                 掲示板を一つ編集するためのフォームを表示
PATCH/PUT　　　　/boards/:id       boards#update               掲示板の内容を更新する
DELETE           /boards/:id       boards#destroy              掲示板を削除



routes.rb
HTTPメソッド　'パス', to: 'コントローラー＃アクション'

ヘルパーメソッドとは、ビューの中で使用できるメソッドです。
ヘルパーを使用することで読みやすい形で、簡潔にHTMLを記述することができる

コンソールに内で定義したインスタンス変数は、ビューで参照することができる

<%= form_for @board do |f| %>
<div class="form-group">
  <%= f.label :name, '名前'%>
  <%= f.text_field :name, class: 'form-control'%>
</div>
<div class="form-group">
  <%= f.label :title, 'タイトル'%>
  <%= f.text_field :title, class: 'form-control'%>
</div>
<div class="form-group">
  <%= f.label :body, '本文'%>
  <%= f.text_area :body, class: 'form-control', row: 10 %>
</div>
<%= submit '保存', class: 'btn btn-primary'%>
<% end %>
form_forヘルパーには、ファームビルダーオブジェクトのブロック引数を取ります。
このオブジェクトを使用して、モデルのデータを新規に作成するフォームを作ることができる
f.label (label名を出力する)　第一引数に（：プロパティ名）, 第二引数に（：ラベル名）
f.text_field (text名を出力する)　第一引数に（：プロパティ名）, 第二引数に（class属性）
[プロパティ名はテーブル作成したname,title,bodyカラム]

開発時のみ必要なgemは、group :developmentのブロック内にgemを追記する
デバッグはgroup :developmentのブロック内に追加
gem 'pry-byebug'
bundle installを実行
 
コントローラー内のインスタンス内にbinding.pryを入れるとプログラムが一時停止する
変数の内容を確認したり、値をセットしたり、メソッドを呼び出したりする
binding.pryは使用後は必ず消す

params.require(モデル名のキー).permit(プロパティのキー)

日本時間にするにはconfig/application.rbを開く
Application内に  config.time_zone = 'Tokyo'を追加
日付データのフォーマット
config/initializers/time_formats.rbを作成
time_formats.rbに
Time::DATE_FORMATE[:datetime_jp（任意のキー）] = '%Y年 %m月 %d日  %H時 %M分'
時間を表示するメソッドは
(例)　.create_at.to_s(:datetime_jp)とする

IDを取得するためには　　.find(params[:id])を用いる

きれいに改行するには、simple_formatを使う
simple_format(フォーマットしたいオブジェクトを渡す)

/rails/info/routesのパスにアクセスすると設定済みのルート情報を確認できる

resources :boards(複数形のシンボル名)　＝　基本的のルーティング設定と同じ
使わないルーティングがあるときは
,only: [:index(シンボル名)]　を使って制限する

リダイレクトとはユーザーがアクセスしてきたURLとは別のページに転送する処理のこと

更新
モデルオブジェクトのupdateメソッドで行う
.update(ハッシュ形式でプロパティ名と値の組)

共通のものをパーシャルで作成して、パーシャルのフォームを複数のビューで利用
パーシャルの場合は、ファイル名の先頭にアンダースコアをつける
パーシャルの呼び出し
<%= render partial: 'パーシャル名（form）'%>
(例)_form.html.erb を呼び出す場合は、単に'form'と書きます

_form.html.erb で直接インスタンス変数を参照するのは
バグになりやすいという意味で、あまりいい書き方ではない
① new.html.erb のビューを見ても、必要なインスタンス変数を把握できない
② _form.html.erb(パーシャル)で直に@borderという名前のインスタンス変数を用意する必要が出てきてしまうため
解決法
(例)
<%= render partial: 'form', locals: {board: @board} %>とすることで
パーシャルのローカル変数として@boardを渡すことができる
パーシャル側は@board(インスタンス変数)→board(ローカル変数)に書き換える

object: @board とした場合は、パーシャル名（board）と同名のローカル変数が作成されて、パーシャルに渡す

削除
(例)<%= link_to '削除', board, class: 'btn btn-outline-dark', method: :delete %>
されて、ボタンのクリックにより、_method=deleteというパラメータが送信される

before_action シンボル名,only で制限する
ほかのメソッドが実行する前に実行する

デフォルトで用意されているRailsの実行環境
test: テスト実行用の環境
development: 開発環境用
production: 本番環境用

動作確認用のデータ作成はseeds.rbを使う
(例)
５０個のデータの作成
if Rails.env == 'development'
  (1..50).each do |i|
    Border.create(name; "ユーザー#{i}", title: "タイトル#{i}", body: "本文#{i}")
  end
end
実行するには rails db:seed

ページネーションの追加
Gemfileにgem 'kaminari'を追加
bundle installを実行
サーバー再起動
kaminariの設定ファイルを生成
rails g kaminari:configを実行
kaminariのビューファイルの生成
rails g kaminari:views bootstrap4
コントローラーのindexアクションの編集
(例)
def index
  @boards = Board.page(params[:page])
end
pageメソッドを呼ぶことにより、引数に指定したページに表示するデータだけを取得してくれる
デフォルトでは、1ページ辺り25件のデータを取得
ページのリンクの追加　<%= paginate @boards %>

デフォルトを日本語するには
application.rb内のApplication内に config.i18n.default_locale = :jaを追加
config/locals/ja.ymlを作成して編集する
ja.yml内に
ja:
  view:
    pagination:
      first: '最初'
      last: '最後'
      previous: '前'
      next: '次'
      truncate: '...'
を記述する
サーバーの再起動
表示をセンターにするには_paginator.html.erbを編集
<class="pagination justify-content-center">を追加
1ページの件数の変更
config/initializers/kaminari_config.rbを編集
config.default_per_page = 10
1ページに10件に変更
サーバー再起動

フラッシュメッセージ
コントローラーのアクションに
flash[:notice] = "「#{board.title}」　の掲示板を作成しました"
,flash: { notice: "「#{board.title}」　の掲示板を作成しました"}
フラッシュメッセージ表示
ビューに
<%= if flash[:notice] %>
  <div class="alert alert-primary"><%= flash[:notice] %></div>
<% end %>

バリデーション
モデル.rbのページに追加
(例)
validates :name, presence: true(値の入力が必須), length: { maximum: 10 }
validates :title, presence: true, length: { maximum: 30 }
validates :body, presence: true, length: { maximum: 100 }