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| %>


<%= f.label :name, '名前'%>
<%= f.text_field :name, class: 'form-control'%>


<%= f.label :title, 'タイトル'%>
<%= f.text_field :title, class: 'form-control'%>


<%= f.label :body, '本文'%>
<%= f.text_area :body, class: 'form-control', row: 10 %>

<%= 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を使う
(例)
50個のデータの作成
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を編集
を追加
1ページの件数の変更
config/initializers/kaminari_config.rbを編集
config.default_per_page = 10
1ページに10件に変更
サーバー再起動

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

<%= flash[:notice] %>

<% end %>

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