45日目:Ruby on Rails Ⅱ:データベースを使いこなす/rails consoleに挑戦/共通レイアウト/link_toでリンクを作成 (Post/rails console/save/all/link_to)
<学習日>
45日目
<学習内容>
① Ruby on Rails Ⅱ(47-100%):データベースを使いこなす/rails consoleに挑戦/共通レイアウト/link_toでリンクを作成 (Post/rails console/save/all/link_to)
<参考>
Progateレベル:192
<学習内容詳細>
今日は遅くなりましたが、昨日の宣言とおりRuby on Rails Ⅱを無事終わらせることが出来ました^^
途中コンソールでの作業「rails console」が出てきて、少し戸惑ってしまいましたが、なんとか完了です。
私はあの黒い画面が、どうも苦手なようですね^^;;
① Ruby on Rails Ⅱ(47-100%):データベースを使いこなす/rails consoleに挑戦/link_toでリンクを作成 (Post/rails console/save/all/link_to)
今日はデータベースを使ったり、rails consoleをやってみたりとなかなか私にとっては大変な内容でした^^;;
理解に苦労しましたが、早速具体的なcodeを挙げながら、振り返っていきます!
・Ruby on Railsにすでに用意されているクラス「Post」を使いこなす。
前回の最後に「Post」というテーブルを作ってみたいな流れでしたが、実際にはPostというモデル名のデータベースを作成していたようです。
app/models/post.rbというように、モデルが定義されたファイルと、マイグレーションファイルが作成される。
なお、モデルは「ApplicationRecord」を継承する形になっている。
・「rails console」というコンソール上でrailsを実行することが可能な方法がある
⇒データベースを作成するときなど、サクサクとrailsで簡易的な作業を実行したいときに使う感じ?
⇒そんな感じだった!
・データベースを作成する方法
実際にデータベースに情報を追加していく。
具体的なcodeは以下のような感じ。
<コンソール>
$ rails console ⇐ rails consoleを立ち上げ
post1=Post.new(content:"今日も元気!") ⇐ データベースを追加
post1.save ⇐ 追加したデータベースを記録
quit ⇐ rails consoleを停止
これで”今日も元気!”というテキストデータを持ったデータベースが、作成日時等の情報と合わせて、データベースに追加される。
・データベースから情報を取得する方法
今度は作成したデータベースから、実際に情報を取得する。
このとき、データの取得は横一行分を取り出してから、特定の列のセルをゲットすることも出来るといった感じ。
具体的なcodeは以下のとおり。
post = Post.first ⇐ 最初の行の情報を取得
post.content ⇐ コンテントという項目(列)のセルの情報を取得
あくまでデータベールはテーブルであることを意識すれば、混乱しにくい。
さらに進めていくと、データベースのすべての情報を得て、インデックス番号を指定して、項目の名称を指定すれば、自動的に一つのセルの値を参照することが出来る。
順番に説明すると以下のとおり。
①posts=Post.all ⇐ データベースの全ての情報を「配列」として取得
②posts[1] ⇐ 配列のインデックス1の要素を取得
③posts[1].content ⇐ 配列のインデックス1の要素のcontentの項目のデータを取得
これらをまとめると、この時に得られる情報を一発で書くには
Post.all[1].contentでOK!
・上記のデータベース取得のcodeをエディタ側のcodeに反映させる
具体的に、投稿されたコメントを順番に全て表示するには以下のとおり。
<コントローラー:ここでhtmlでの変数を規定する>
@posts = Post.all
<ビュー:ここのhtmlにRubyのcodeを埋め込んで、繰り返し処理させる>
<% @posts.each do |post| %>
<%= post.content %>
<% end %>
つまり、変数にデータベースから持ってきたテーブル(配列を要素に持つ配列)を突っ込んで、htmlに埋め込んだRubyのcodeで操作するという感じ。
・同じヘッダー等、特定の同じhtmlのcodeをもっているページを何枚も扱うとき、全てにその特定のcodeを反映させる方法
結論として、views/layouts/application.html.erbにまとめてしまうことが出来る。
このファイルを「共通レイアウト」と呼んだりするが、共通でない部分を<%= yield %>で書いて、ここに共通でないhtmlコードを代入して、各々のページをブラウザに反映しているという仕組みなっていることに注意。つまり、<%= yield %>との位置関係を間違えると、とんでもないページになる。
・リンクの作成コード(Ruby)
<htmlファイル>
<%= link_to("表示名","url") %>
例えば、”ここをクリック”というリンクボタンで、リンク先が"/index"だとした場合、以下のようなcodeになる。
<%= link_to("ここをクリック","/index") %>
はい、ということで、今日もやや抽象的な内容が続いたので、少し理解に苦労しました^^
そろそろ道場も目に入ってきたので、気合を入れて進めていきたいと思います^^
ではでは、1日でも長く続けられるように頑張っていきます^^
同志の方、一緒に頑張っていきましょう!