LoginSignup
4
4

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-08-02

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はこちら

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)文はプログラミングの中でも共通で大事なものです!
実際に手を動かして理解してみましょう!

4
4
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
4
4