rails5 progate 整理メモ　投稿の一覧を表示する

# 投稿一覧にもユーザー情報を表示しよう
```html
<img src="<%= "/user_images/#{post.user.image_name}"%>">
.
.
.
<img src="<%= "/user_images/#{post.user.image_name}"%> ">
```
で成功した。
ところで
# ""で２重に囲む理由とはなんなのか？
外側の```""```で文字列として扱うのだからいいじゃないか。

srcはパスを表すために""で囲んで文字列にするのはわかる。
ではなぜ
```<%= %>```で囲む時も""を囲んで文字列にするのか？わからない。

## ```<%= %>```とは何か
```<%= %>```はrubyの文を実行するためのタグ
## 答えは出なかった。
しかし推測ならできた。
```<%= %>```で囲む理由は#{}の式展開(ruby)を使うため。
```<%= %>```の中で```””```で囲む理由は式展開が```""```で囲まれないとただの文字列として扱われてしまうため。
以上のより
```""```を２重で囲む必要があると思う。

## imgタグのsrcの値に、正しい値を追加してください
```html
<img src="<%= "/user_images/#{post.user.id}" %>">
```
```html
<img src="<%= "/user_images/#{post.user.image_name}" %>">
```
カラムの名前が間違っていた。
# ユーザー詳細ページに投稿を表示しよう（1）
##  find_by
このメソッドではその条件に合致するデータを「1件だけ」取得することができる

## whereメソッド
ある条件に合致する「複数の」データを取得する
whereメソッドでデータを取得した場合、それぞれのデータは配列に入っています。

## rails consoleで```Where```を使う。
```rb
[1] pry(main)> posts = Post.where(user_id: 1)
  Post Load (0.1ms)  SELECT "posts".* FROM "posts" WHERE "posts"."user_id" = ?  [["user_id", 1]]
=> [#<Post:0x000055dbbbf62ba0
  id: 1,
  content: "hogehoge\r\n",
  created_at: Mon, 16 May 2022 14:25:03 JST +09:00,
  updated_at: Mon, 16 May 2022 14:25:03 JST +09:00,
  user_id: 1>]

[2] pry(main)> posts[0].content
=> "hogehoge\r\n"
```

# ユーザー詳細ページに投稿を表示しよう（2）
## インスタンスメソッドで```Where```を使う
```user.rb
  def posts
    return User.where(user_id: self.id)
  end
```
```self```はUserモデルを指している。
```userモデル```のデータベースから```user_id```がメソッドを使う```インスタンスのid```を基に投稿を探す。
```rb
[1] pry(main)> user = User.find_by(id: 1)
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
=> #<User:0x000055d5c845b368
 id: 1,
 name: "にんじゃわんこ",
 email: "wanko@prog-8.com",
 created_at: Tue, 18 Apr 2017 17:06:52 JST +09:00,
 updated_at: Tue, 18 Apr 2017 17:06:52 JST +09:00,
 image_name: "default_user.jpg",
 password: "ninjawanko">

[2] pry(main)> user.posts
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."user_id" = ?  [["user_id", 1]]
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."user_id" = ?  [["user_id", 1]]
=> #<User::ActiveRecord_Relation:0x2aeae4201d64>
```
## whereメソッドを用いて、user_idが「self.id」の投稿を取得してください
```user.rb
  def posts
    return User.where(user_id: self.id)
  end
```
```user.rb
  def posts
    return Post.where(user_id: self.id)
  end
```
取り出す```モデルが違っていた```。

```userモデル```のデータベースから```user_id```がメソッドを使う```インスタンスのid```を基に投稿（Postモデルモデルのデータ）を探す。

## 思ったこと
取り出すモデルのデータを意識することが大事だ。
```self```にインスタンスを代入させるのかな。

これで成功。

# ユーザー詳細ページに投稿を表示しよう（3）
一覧を表示させるには```each文```を使う。
```html
<% @user.posts.each do |post| %>
.
.
.
<% end %>
```
これで一つ一つ取り出せる
```html
  <% @user.posts.each do |post| %>
      <!-- 指定されたコードを貼り付けてください -->
      <div class="posts-index-item">
        <div class="post-left">
          <img src="<%= "/user_images/#{post.user.image_name}" %>">
        </div>
        <div class="post-right">
          <div class="post-user-name">
            <%= link_to(post.user.name, "/users/#{post.user.id}") %>
          </div>
          <%= link_to(post.content, "/posts/#{post.id}") %>
        </div>
      </div>
    <!-- 以下の<% %>を使ってeach文のendを追加してください -->
    <% end %>
```
```each文```の中は特段変わらない```html```の文

## 思ったこと
今はなんだかわからないがなんか腑に落ちない感じがする。