BNBのプログラミング勉強記録

ガチのプログラミング初心者が駆け上がっていくブログ

メモ(Rails II)

埋め込みRubyの基本

  • 一覧ページを作成する時は、indexというアクション名を使用することが一般的
  • index.html.erbのようなerbという形式のファイルでは、HTMLファイルの中にRubyのコードを記述することができる。「erb」とは「Embedded Ruby(埋め込みRuby)」の略
<header>
  <div class="header-logo">
    <a href="/">TweetApp</a>
  </div>
  <ul class="header-menus">
    <li>
      <a href="/about">TweetAppとは</a>
    </li>
  </ul>
</header>

<% post1="今日からProgateでRailsの勉強するよー!" %>
<% post2="投稿一覧ページ作成中!" %>

<div class="main posts-index">
  <div class="container">
    <div class="posts-index-item">
      <%= post1 %>
    </div>
    <div class="posts-index-item">
      <%= post2 %>
    </div>
  </div>
</div>

アクションで定義した変数をビューで使う

  • 通常、アクションで定義した変数をビューで使用することはできないが、変数名を「@」から始めることでこの変数は特殊な変数となり、ビューファイルでも使用することができる
#posts_controller.rb

class PostsController < ApplicationController
  def index
    @posts=[
      "今日からProgateでRailsの勉強するよー!",
      "投稿一覧ページ作成中!"
    ]
  end
end
<!--index.html.erb--!>

<% @posts.each do |post| %>
      <div class="posts-index-item">
        <%= post %>
      </div>
    <% end %>

マイグレーションファイルを作る

  • マイグレーションファイルと呼ばれる、データベースに変更を指示するためのファイルがある
  • postsテーブルを作成するマイグレーションファイルは「rails g model Post content:text」というコマンドで作成することができる
  • 「text」は「長い文字列」を意味しており、contentカラムにどのようなデータが入るかを意味している
  • テーブル名は単数形にする(なんで?)
  • コマンドを実行すると、db/migrateフォルダの下にマイグレーションファイルが作成される

データベースに反映

モデルとは

  • rails g model」コマンドによって、Postモデルが定義されたファイル「post.rb」が、app/modelsフォルダの中に作成されている
  • ファイルの中には、ApplicationRecordクラスを継承するPostクラスが定義されている(モデルと呼ぶ)
  • rails g model Post ...」の「Post」の部分には、モデル名を指定する→このコマンドによって、以下の2つのファイルが作成される
  • app/modelsフォルダ・・・モデルが定義されたファイル
  • db/migrateフォルダ・・・マイグレーションファイル

rails console

  • ターミナル上で「rails console」と入力し実行(Enter)することで、コンソールを起動することができる
  • コンソールを起動した状態で、「1+1」を実行すると、その実行結果が表示される
  • 「quit」を実行すると、コンソールを終了することができる
  • 変数も、quitまではコンソール上で扱える

rails consoleでデータベースに登録

post1=Post.new(content: "今日からProgateでRailsの勉強するよー!")

#中略

post1.save

最初のデータのcontentを見る

post=Post.first

#中略

post.content

データを全て取り出す、一つを見る

posts=Post.all

#中略

post[0].content

Post.allを応用してeach文を書き換え

#posts_controller.rb

class PostsController < ApplicationController
  def index
    @posts=Post.all
  end
end
<!--index.html.erb--!>

<% @posts.each do |post| %>
      <div class="posts-index-item">
        <%= post.content %>
      </div>
    <% end %>

yield

  • Railsでは、「views/layouts/application.html.erb」に共通のHTMLを書いておくことができる
  • 初期状態でも、headタグやbodyタグなどの共通部分はこちらに書かれている
  • 「views/layouts/application.html.erb」にはyieldというコードがある。top.html.erbなどの各ビューファイルは、このyieldの部分に代入され、application.html.erbの一部としてブラウザに表示されている。
  • この仕組みによって、ヘッダーなどの共通のレイアウトを1つにまとめることができる
  • 第1引数に名前、第2引数にリンク先を記述するとアンカータグになってくれる。
  • 今はよくわからんが、色々メリットがあるらしい。
<body>
  <header>
    <div class="header-logo">
      <%= link_to("TweetApp","/") %>
    </div>
    <ul class="header-menus">
      <li>
        <%= link_to("TweetAppとは","/about") %>
      </li>
      <li>
        <%= link_to("投稿一覧","/posts/index") %>
      </li>
    </ul>
  </header>
  <%= yield %>
</body>