勉強ログ ~15/55~
祝日も粛々とカリキュラムを進めています。(途中読書に脱線したのはおいといて)
Lesson6でとうとう本格的にRailsを使ったプログラミングが始まりましたが、一気に覚える量が増えたので、おっさんには中々覚えきれないです。
懐かしや20代までの記憶力...(バカなのは今も昔も一緒です。)
コンソールだけでもrails、SQLite、rubyと種類があって、どのコマンドがどのコンソールのものだったか、使おうとするたびに「どれだっけ」となってしまいます。
慣れの部分もあるでしょうが、先が思いやられる感じです。
とりあえずここから先は、実際に作成してビルドして確認することが増えてくるので、実践の中で覚えていければと思います。
『時間は寸分の狂いもなく確実に与えられるが、その量は冷酷なまでに限定されている。』
時間:15:00~16:00、18:30~19:30、21:30~23:30
メモ:
・新規プロジェクトの作成
rails new
・サーバーの起動
rails s
・Gitリポジトリの初期化
1.git init ・・・ リポジトリの作成
2.git add . ・・・ ローカルリポジトリにプロジェクトのファイルをすべて反映
3.git commit -m "Message" ・・・ コミットメッセージ付きでコミット
4.git remote add origin "GitのプロジェクトURL" ・・・初回のみ。反映先リポジトリの設定
5.git push origin master ・・・ ローカルのコミット内容をリモートリポジトリに反映
・コントローラーの作成
rails generate controller コントローラ名 アクション名
(例)rails generate controller messages index
→モデルを扱うコントローラの名称は、複数形に英単語で命名する。
・ルーティング
外部からのリクエストをどのようにコントローラとアクションに振り分けるかのルールを
「ルーティング」と呼び、「config/routes.rb」に記述する。
・ルーティングの確認
rake routes
・rootディレクトリを指定した場合のアクセス先を変更する。
root "コントローラ名#アクション名"
・モデルの作成
rails generate model モデル名 列名:データ型,…
(例)rails generate model Message name:string,body:string
→モデル名は1文字目を大文字、単語の単数系で作成する。
→一方、テーブル名の方は同じ単語の複数形で作成する命名規則がある。
→実際にデータベースにテーブルが作成されるのは、後述の「rake db:migrate」コマンドを
実行した時であり、実行したマイグレーションファイルの情報は「schema.rb」に記録される。
18:30~19:30
・モデル
モデルは「ActiveRecord::Base」クラスを継承して作成される。
モデルを作成した場合、テーブルには自動的に作成日時をと更新日時を記録するカラムが作成
される。(created_at、updated_at)NotNull制約付き。
・マイグレーション
SQLを使用せずにデータベースの情報を作成、更新する機能。
・マイグレーションの実行
rake db:migrate
→db/schema.rbファイルに実行スキーマの情報が記録される。手動での編集は禁止。
・データベースの確認
rails db
→SQLiteに接続し、DBコンソールを開くコマンド
.schema
→接続中のスキーマの定義情報を表示するコマンド。
・ID
マイグレーションファイル「schema.rb」には記載されていないが、マイグレーション実行時に
テーブルの主キーとして「ID」カラムが自動的に作成される。
・railsコンソールの起動
rails c ("c"は"Console"の略。略せずconsoleと打っても同様。)
・カラム情報の確認
モデル名.column_names
(モデル名は英単語の複数形、かつ1文字目が大文字であることに注意)
・データの登録
・SQL情報の作成
変数 = モデル名.new(カラム名:値、…)
(例)msg = Message.new(name:"Taro",body:"Hello")
・実行
変数.save
(例)msg.save
21:30~
・データの確認
モデル名.all
→モデル名は単数形の単語、かつ1文字目は大文字
SQLによる確認
1.rails db でSQLiteに接続
SELECT * FROM テーブル名;
※SQLで確認する際、テーブル名はモデル名の複数形であることに注意。
・DBのテーブルを確認する
DBコンソールに接続後「.table」(rails c(railsコンソール)ではないので注意)
・データSELECT方法のいろいろ
1.特定IDのデータを取得(単一データ)
モデル名.find(id)
→SELECT * FROM Table Where ID =id;
2.ID以外のカラムを指定して取得(単一データ)
変数 = モデル名.find_by(カラム名:値)
※変数はなくてもよい。
→1.2.はいずれも1件分の結果のみを返す。検索結果が重複した場合は、IDが小さいほうが
選択される。
3.whereによるデータ取得(複数データ)
モデル名.where(カラム名:値)
→SELECT * FROM Table Where ID = id;
※SQLiteでSQL文を発行した場合、結果が0件の場合は何も表示されない。
4.先頭、末尾データの取得(ID順)
・モデル名.first ・・・ 先頭データを取得
・モデル名.last ・・・ 最後尾のデータを取得
→「where」で条件の追加も可能
(例)モデル名.where(カラム名:値).first
・データの削除
1.選択削除
1.変数 = モデル名.find_by(カラム名:値)
→処理対象を検索して変数にいったん格納
2.変数.destroy
2.全削除
モデル名.destroy_all
・routesの設定
ルーティングの設定を行う「routes.rb」においてresourcesメソッドを使用することで、
リソース操作に必要なURLを自動的に作成することができる。
→C#-MVCのCRUD的なもの (Create、Read(List(Index)、Update、Delete))
(例)
Rails.application.routes.draw do
resources :messages →resources テーブル名のシンボル記法
end
※「:messages」の後ろに「, only:[特定アクション(シンボル記法)]」を記載することで、
特定のリソースファイルのみ作成するようにすることができる。
・URLへルパ
リソースに必要なURLを自動的に作成するもの
→へルパ名:アクション名_テーブル名_path
「_path」を「_url」とすることで、絶対URLの設定も可能。
・フォームの作成
フォーム等のビューを作成する際に「ERB」というファイルを使用する。
ERBはHTML文書にRubyのスクリプトを埋め込むためのライブラリで、C#MVCのASPX見たいなもの。
・スクリプトコードの埋め込み
1.<%= code %> ・・・codeを実行した結果を文字列として埋め込む
2.<% code %> ・・・codeは実行されるが、結果は埋め込まれない
3.<%# comment %> ・・・コメントの記載
・フォームへルパ
<%= form_for(@モデルオブジェクト ) do |f| %>
<% end %>
特定のモデルオブジェクトを作成、編集するためのフォームを自動生成する。
フォームへルパでモデルオブジェクトとフォームを関連づけることで、フォームの
入力値をモデルオブジェクトに割り当てたり、モデルオブジェクトを介してDBから
データを取得し、表示したりすることが可能となる。
・モデルオブジェクト初期化
モデルオブジェクト.new(引数)
・ページリダイレクト
redirect_to リダイレクト先URL,notice:'メッセージ'