#rails開発の条件分岐のあれこれ
rails でのwebアプリケーション開発であるといい記述をまとめてみました!
###投稿に対して投稿者のみ編集・削除ができるようにしたい!
rails でSNSのようなアプリケーションを作るとき,投稿に対してユーザー誰もが編集したり
削除できるとダメですよね!
そんなとき便利なのが下の条件分岐です!
devise(Gem)をインストールしていうることを前提とします
belongs_to :user
has_many :posts
resources :post, only: [:show]
def show
@film = Post.find(params[:id])
end
<% 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はこちら
<% 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のときどうしよう..という場合にこれが使えます!
def change
add_column :posts, :image, :string
end
def show
@film = Post.find(params[:id])
end
<% if @post.image.present? %>
<%= image_tag @post.image_url, :size =>'150x150', class: "img_fluid rounded-circle" %>
<% end %>
<% レコード.カラム.present? %>の部分が大事です!
これによってnilではなく存在していれば表示される条件分岐となります!
[補足]
画像サイズを正方形にして,bootstrapによって画像をTwitterのプロフィール画像のように丸くしています
##最後に
ここまで3つの個人的によく使用する条件分岐をについて記述してみました!
間違い等ございましたら指摘してください!
条件分岐(if)文はプログラミングの中でも共通で大事なものです!
実際に手を動かして理解してみましょう!