はじめに
マジでただのメモ 読んでもらうために書いてないので悪しからず...
内容
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]
で取得できる