はじめに
マジでただのメモ 読んでもらうために書いてないので悪しからず...
内容
progate の rails入門を進めていく
1章~3章まで
rails I
view / controller / routing についてざっくりと理解
view を作る
以下のコマンドで、view下に home フォルダと top.html.erb が作成される
rails generate controller home top
controller って何?
- ページを表示する時、ralisの中では「controller」を経由してブラウザにviewを返している
-
rails generate controller home topを打った時、以下が起こる- controllerの中に「home_controller.rb」が作成される
- この中に
topメソッドが生成される- このメソッドを アクション という
- controllerと同じ名前のviewフォルダからアクションと同じ名前のHTMLファイルを探してブラウザに返す
- 用途ごとにcontrollerを作り分けるのがいいらしい
ルーティングって何?
- urlとコントローラを紐づけるもの
-
config/routers.rbに定義 -
get "URL" => "コントローラー名#アクション名"って感じで書く
view は?
- css ファイルは
app/assets/stylesheetsにある - 画像は
app/public下に配置することで、絶対パスで読み出せる
rails II
データベースとの接続をやっていく
変数宣言
-
<% posts="hogehoge" %>みたいな感じで宣言 - 配列とかも宣言できる
-
<%= posts %>みたいに変数を使う -
<% posts.each do |post| %> ~~ <% end %>みたいな感じで for文みたいなのを書ける - Controller 内に
@posts = [~~]みたいな感じで宣言して、これをview の中で使う
データベースの作り方
-
rails g model Post context:textで、モデルファイルとマイグレーションファイルを作成出来る- context = カラム名
- text = データ型
- Post ~ モデル名
※ このコマンドは migrationファイルを作るだけ (=datamodelを作るだけ) で、dbに反映してくれるわけではない
- マイグレーションファイルは、
db/migrate下に出来る -
rails db:migrateをすることで実際のデータベースの反映される
「モデル」について
- ApplicationRecordを継承したクラスをモデルと呼ぶ
-
rails g modelコマンドからapp/models/~~.rbに作成される
共通のレイアウトをまとめる
-
views/layouts/application.html.erb内の<%= yield %>の部分に各viewファイルが代入され、application.html.erb の一部としてブラウザに表示されていた- ので、ここに共通のヘッダーとかは入れてあげるのが良い
rails III
URLParams の取得
- routes の中で、
get "posts/:id"の:idの部分がparamsという変数に入る -
@post = Post.find_by(id: params[:id])みたいな感じで、特定のidの何かを取ってくることが出来る - controller 内で 以下のようにして取得可能
def show
@id=params[:id]
@post = Post.find_by(id: @id)
end
- viewの中で以下のように変数展開
<% @posts.each do |post| %>
<div class="posts-index-item">
<%= link_to(post.content, "/posts/#{post.id}") %>
</div>
<% end %>
データの作成
- view 内で、
<%= form_tag("hogeURL") do%> ~~ <% end %>を用いることで、submitしたデータを指定したURL に送る- 例えば
form_tag("create")とすれば、routes内でcreateで指定されたアクションを起こす
- 例えば
-
redirect_to("fugaURL")をcontroller 内に書くことで、リダイレクトする -
<textarea name="content">として submit すると、rails側でparams[:content]で取得できる