rails開発の条件分岐のあれこれ

#rails開発の条件分岐のあれこれ
rails でのwebアプリケーション開発であるといい記述をまとめてみました！
###投稿に対して投稿者のみ編集・削除ができるようにしたい！
rails でSNSのようなアプリケーションを作るとき，投稿に対してユーザー誰もが編集したり
削除できるとダメですよね！
そんなとき便利なのが下の条件分岐です！

**devise(Gem)をインストールしていうることを前提とします**

```post.rb
  belongs_to :user
```

```user.rb
  has_many :posts
```

```route.rb
  resources :post, only: [:show]
```

```post_controller.rb
  def show
      @film = Post.find(params[:id])
  end
```

```show.html.erb
  <% if @post.user_id == current_user.id %> #追記
    <%= link_to "編集する", edit_post_path(@post.id) %>
    <%= link_to "削除する", post_path, method: :delete %>
  <% end %> ＃追記
```

このように編集・削除の部分を条件分岐で
**もし，投稿者のidがログイン中のユーザーidと一致したら**
の意味を持つ，<% if @post.user_id == current_user.id %>　でかこんであげるといいでしょう！

###ログインしている人としていない人で記述を変えたい！
例えばこのようなことはないでしょうか？
ログイン前には，ヘッダーに新規登録・ログインのリンクを
ログイン後には，マイページやログアウトのリンクを
実装したい！
こんな時に便利なのが下の条件分岐です！

**devise(Gem)をインストールしていうることを前提とします**

**今回，bootstrapを使用したナビゲーションバーを使用しています**
[bootstrapはこちら](https://getbootstrap.com/)

```layout/application.html.erb
  <% if user_signed_in? %>
      <nav class="navbar fixed-top navbar-expand-lg navbar-light">
        <a class="navbar-brand" href="/">ホーム</a>
        <div class="collapse navbar-collapse" id="navbarSupportedContent">
          <ul class="navbar-nav mr-auto">
            <li class="nav-item">
              <a class="nav-link" href="/post/new" style="color: white;">投稿する<span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="/users/<%= current_user.id %>">マイページ</a>
            </li>
            <li class="nav-item" >
              <%= link_to 'ログアウト', destroy_user_session_path, data: { confirm: "ログアウトしますか？" }, method: :delete, class:"nav-link"%>
            </li>
          </ul>
        </div>
      </nav>
  <% else %>
      <nav class="navbar fixed-top navbar-expand-lg navbar-light">
        <a class="navbar-brand" href="/home">トップ</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarSupportedContent">
          <ul class="navbar-nav mr-auto">
            <li class="nav-item">
              <a class="nav-link" href="/users/sign_up" style="color: white;">新規登録</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="/users/sign_in" style="color: white;">ログイン</a>
            </li>
          </ul>
        </div>
      </nav>
  <% end %>
```

**<% if user_signed_in? %>の部分が重要です！**
これは，「もしユーザーがログインしていたら」という条件分岐なのです！
<% else %>（そうでなければ→「ログインしていなかったら」）との組み合わせでさらなる力を発揮します！


###画像投稿でnilのエラーを吐いてしまう
**cloudinaryを使った画像投稿を実装できていることとします

今回は画像投稿を例に出していますがその他にも，nilのときどうしよう．．という場合にこれが使えます！

```db/migrate/OOOOOOOOOOOOOO_add_image_to_posts.rb
  def change
    add_column :posts, :image, :string
  end
```

```post_controller.rb
  def show
      @film = Post.find(params[:id])
  end
```

```show.html.erb
　　<% if @post.image.present? %>
      <%= image_tag @post.image_url, :size =>'150x150', class: "img_fluid rounded-circle" %>
   <% end %>
```

**<% レコード.カラム.present? %>の部分が大事です！**
これによってnilではなく存在していれば表示される条件分岐となります！

[補足]
画像サイズを正方形にして，bootstrapによって画像をTwitterのプロフィール画像のように丸くしています

##最後に
ここまで3つの個人的によく使用する条件分岐をについて記述してみました！
間違い等ございましたら指摘してください！

条件分岐（if）文はプログラミングの中でも共通で大事なものです！
実際に手を動かして理解してみましょう！