0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

アプリを作成する ユーザーの一覧を表示させる

Last updated at Posted at 2022-05-20

ヘッダーに表示させる。

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.erbposts.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入門(技術評論社)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?