ヘッダーに表示させる。
progateにapplication.html.erb
を使ってヘッダーを統一しようと思う。
まずapplication.html.erb
を確かめてみる。
application.html.erb
を確認
application.html
<!DOCTYPE html>
<html>
<head>
<title>Garden</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "application" %>
</head>
<body>
<%= yield %>
</body>
</html>
<%= yield %>
で表示されるようになっている。
そもそもこの```yieldとは何か?
参考書を読んでみた。
irb(main):010:1* def greeting
irb(main):011:1* puts 'おはよう'
irb(main):012:1* puts 'こんばんは'
irb(main):013:0> end
=> :greeting
irb(main):014:1* greeting do
irb(main):015:1* puts 'こんにちは'
irb(main):016:0> end
おはよう
こんばんは
=> nil
irb(main):017:1* def greeting
irb(main):018:1* puts 'おはよう'
irb(main):019:1* yield
irb(main):020:1* puts 'こんばんは'
irb(main):021:0> end
=> :greeting
irb(main):022:1* greeting do
irb(main):023:1* puts 'こんにちは'
irb(main):024:0> end
おはよう
こんにちは
こんばんは
=> nil
irb(main):025:1* def greeting
irb(main):026:1* puts 'おはよう'
irb(main):027:1* yield
irb(main):028:1* puts 'こんばんは'
irb(main):029:0> end
=> :greeting
irb(main):030:1* def greeting
irb(main):031:1* puts 'おはよう'
irb(main):032:1* yield
irb(main):033:1* yield
irb(main):034:1* puts 'こんばんは'
irb(main):035:0> end
=> :greeting
irb(main):036:1* greeting do
irb(main):037:1* puts 'こんにちは'
irb(main):038:0> end
おはよう
こんにちは
こんにちは
こんばんは
=> nil
irb(main):039:0> greeting
おはよう
(irb):32:in `greeting': no block given (yield) (LocalJumpError)
これやってみて思ったことは
メソッドにyieldを書き込み設定した後 ブロック構文を作動させるとブロック構文の処理が作動し、yieldに表示されるみたいだ。
つまり他のhtmlはブロック構文の扱いなのか?
早速progateを見てみよう。
user.html.erb
やposts.html.erb
にもブロック構文が見当たらなかった。
どう言うことだ?
Progateを真似してヘッダーとフッターをつけてみた。
application.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "application" %>
</head>
<body>
<header>
hogehoge_header
</header>
<%= yield %>
<footer>
hogehoge_footer
</footer>
</body>
</html>
show.html
<div class="edfg">
<div>ユーザー紹介</div>
<div>
id:
<%= @user.id %>
</div>
<div>
ユーザー名:
<%= @user.name %>
</div>
</div>
これのどこがブロック構文なのか分からない。
hogehoge_header
ユーザー紹介
id: 70
ユーザー名: あ
hogehoge_footer
と表示されたので問題はないのかな?
機械側がうまくやってくれてそうな気がする。
これは今はできない。
ホームページから一覧ページに飛ぶようにする
routes.rb
Rails.application.routes.draw do
get '/', to: 'home#top'
get 'users/:id', to: 'users#show'
get 'users/index', to: 'users#index'
end
application.html
.
.
.
<header>
<li>
<%= link_to "ユーザー一覧", "/users/index" %>
</li>
.
.
.
users_controller.rb
def index
@users = User.all
end
index.html
<div>
<%= @users.each do |user| %>
<%= link_to user.name, "/users/#{user.id}" %>
<% end %>
</div>
なぜかindexで要求するとshowアクションが作動する...
まさかここの順番がおかしいからなのか?
routes.rb
Rails.application.routes.draw do
get '/', to: 'home#top'
get 'users/:id', to: 'users#show'
get 'users/index', to: 'users#index'
end
routes.rb
Rails.application.routes.draw do
get '/', to: 'home#top'
get 'users/index', to: 'users#index'
get 'users/:id', to: 'users#show'
end
成功!
リンクは表示されたが謎の配列が表示された。
ここはもっと勉強しなければならない。
思ったこと
・謎の配列の対処
・ルーティングの上下関係の問題
出典 プロを目指す人のためのRuby入門(技術評論社)