完全な個人的なページです。
学校の勉強を大学ノートにメモるみたいに、プログラミングの勉強もノートとかにまとめる作業をしたかった。
後で見返したりしたいし。
ただ、PCでやってる勉強の内容を紙のノートに書くのとか、次元をまたぎ過ぎて迷子になりそうだし、せっかくだから公開しちゃお。ということで、ブログの記事上にまとめることにした。
他人が読んで分かりやすいように書くという意識は、無い。
ルーティング→コントローラー→ビュー
railsはルーティング→コントローラー→ビューという順番で動く。
RCVと覚える。
ルーティングで作られたコントローラー&アクションの対応表をもとに、
コントローラーが動いて、ビューの内容が表示される。
コントローラーが基本Rubyの働きをするから、機能とか変数とかはここに書く。
アクション
アクションは、コントローラと同じ名前のビューフォルダから、アクションと同じ名前のHTMLファイルを探してブラウザに返す。
例えば「home_controller.rb」の中にある
def top
end
みたいなアクションの場合、「views/home/top.html.erb」を探す。
.erbファイル内のRubyの変数はコントローラーのアクション内に書く
そのまま。
なんでだろう、整理しやすくするため?
DBを作って変更を加える
ターミナルで「$rails g model Post content:text」みたいな感じで書くと
「Post」というモデル(rails上の特殊なクラスのこと)名のファイルが出来る。
同時にpostsと名前が付いたマイグレーションファイルpostsカラムが出来る(正確にはテーブル作成後)。
rails consoleを使って、DBに情報を入れていく
rails consoleをターミナル上で起動させて、
post = Post.new(content:Hello world)
と書くと、contentが「Hello world」という新しいPostインスタンスが作成される。
(インスタンス=クラス(モデル)を使って作成されるものの総称)
(クラス=データと処理をひとまとめにした設計図。その設計図から作られるのがインスタンス)
その「Hello world」というpostインスタンスを保存したいときには、
post.save
とする。
DBからコンテンツを取り出す
Post.allを使うと、全てのデータを配列で取り出せる。
Post.all.contentにすると、content列にあるデータだけを取り出せる。
共通のレイアウトにまとめる
Railsでは、「views/layouts/application.html.erb」に共通のHTMLを書いておくことができる。
変数params
コントローラのアクション内では、ルーティングで設定したURLの「:id」の値を取得することができる。
その値はparamsという変数にハッシュとして入っている。params[:id]とすることで、その値を取得することができる。
例えば、投稿postだと、
Post.find_by(id: params[:id])
とすると、idがparams[id]の値を受け取ることが出来る。
フォームの値もparamsで受け取ることが出来る。例えば、params[:content]みたいな感じで受け取る。
フォームの値をDBに保存する
まず、ルーティングに記載をする。
今までは
get “posts/new” => “Posts#new”
のようにgetと書いていたが、フォームの値を受取るには、
post “posts/create” => “Posts#create”
と書く。
通常は「get」で、フォームの値の時は「post」と覚えておく。
追記:
正確には
・データベースを変更しないアクションが「get」
・データベースを変更するアクションが「post」
である。
form_tagメソッドを使って、送信先を指定する。
form_tag(“送信先のURL”) do
end
と書くと、送信先を指定できる。endを忘れない。
リダイレクト設定
リダイレクトはコントローラー上で設定できる。
redirect_to(“URL”)
とアクションの中に書けばOK。
投稿の削除
Post.find_by(id:n)を使って、投稿を取得。
そのあとで、destroyメソッドを使ってpost.destroyとすると消せる。
バリデーションルールを作る
投稿サービスで空の投稿がされないようにする。
バリデーションはモデルで設定する。
validates :検証するカラム名, {検証する内容}
とすると出来る。
例えば、contentsカラムが空で送信されないようにするには、
validates :content, {presence :true}
とする。presenceが値の存在を検証するやつ。
同じユーザーが登録されないようにするには、emailの重複をバリデーションする。
validates:email, {uniqueness: true} とすると、重複をはじける。
因みに検証内容の部分は複数指定できる。
emailが空で送信されないかつ、重複だとすると
validates:email, {presence :true,uniqueness: true}
変数flash
railsのアクションで変数flash[:notice]に文字列を代入すると、flash[:notice]をビューで使うことができる。
変数flashは1度表示された後に自動で削除されるようになっているのが特徴。
データベースにカラムを追加=マイグレーションファイルをまずつくる
railsでマイグレーションファイルのみを作るには、
「rails g migration ファイル名」
とコンソールで書く。
テーブルに変更を加えるにはマイグレーションファイルにchangeメソッドの中に変更点を書く。
「add_column :テーブル名, :カラム名, :データ型」
と書く。