- 一覧ページを作成する時は、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>
アクションで定義した変数をビューで使う
- 通常、アクションで定義した変数をビューで使用することはできないが、変数名を「@」から始めることでこの変数は特殊な変数となり、ビューファイルでも使用することができる
class PostsController < ApplicationController
def index
@posts=[
"今日からProgateでRailsの勉強するよー!",
"投稿一覧ページ作成中!"
]
end
end
<% @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」と入力し実行(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文を書き換え
class PostsController < ApplicationController
def index
@posts=Post.all
end
end
<% @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つにまとめることができる
link_toメソッド
- 第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>