質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

1159閲覧

current_userが nil なら即座に処理を終了させたい

majikadezou

総合スコア34

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/01/11 11:23

編集2020/01/11 13:03

ログインしていない時にuserのshowページに移動した場合、何もせずif文の処理を終了するというコードを書きたいのですがうまくいきません。
ActionView::SyntaxErrorInTemplate in UsersController#show
というエラー文が出てしまいます。

<%= if current_user.id == nil %> <% exit %> <% elsif current_user.admin? && !current_user?(@user) %> | <%= link_to "delete", @user, method: :delete, data: { confirm: "本当に削除しますか?" } %> <%= else %> <% end %>
users/show <% provide(:title, @user.name) %> <div class="container show-container"> <div class="row user-info-container"> <section class="user-info"> <div class="user-name user-info-top"> <% if current_user?(@user) %> <div class=""><%= link_to "プロフィール編集", edit_user_path(current_user), class: "btn btn-lg" %></div> <% end %> <%= if current_user == nil %> <% exit %> <% elsif current_user.admin? && !current_user?(@user) %> | <%= link_to "delete", @user, method: :delete, data: { confirm: "本当に削除しますか?" } %> <%= else %> <% end %> ![イメージ説明](bbdad693b50d7a5e7f5a1a334b6cb393.png)iv class="user-name"> <h1> <%= @user.name %> </h1> </div> <div class="userinfo-picture-follow"> <% if @user.picture.attached? %> <p class="trim-image-to-circle"> <%= image_tag @user.resize_picture %> </p> <% end %> <div class="follow_button"> <%= render 'relationships/follow_button', user: @user %> </div> </div> </div> <% if @user.profile? %> <p class="profile-info"><i class="fas fa-user-alt"></i>プロフィール<br></p> <div class="user-profile"> <%= simple_format@user.profile %> <% else %> <p>まだ自己紹介を書いていません</p> </div> <% end %> </section> <section class="stats"> <%= render 'shared/stats' %> </section> </div> </div> <div class="row-micropost"> <div class="col-logs"> <%= render 'layouts/log' %> </div> </div>

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

nil判定の書き方の問題だったりするのでしょうか?

ruby

1<% if current_user.nil? %>#イコールはいらない 2 #nilのときの処理 3<% else %> #イコールはいらない 4 #nilじゃないときの処理 5<% end %> #イコールはいらない

nil? empty? blank? present? の使い分け
https://qiita.com/somewhatgood@github/items/b74107480ee3821784e6

投稿2020/01/11 12:58

no1knows

総合スコア3365

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

どううまく行かないのか(こうなってほしいのにこうなる)と言うことを書いていただかないと推定で考えることになるので正しい答えを得るのに一度ですまなくなります。
多分 Nil には id がないってエラー?

<%= if current_user %> <% if current_user.admin? && !current_user?(@user) %> | <%= link_to "delete", @user, method: :delete, data: { confirm: "本当に削除しますか?" } %> <%= else %> <% end %> <% end %>

ではどうでしょう

投稿2020/01/11 12:02

winterboum

総合スコア23284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

majikadezou

2020/01/11 12:40 編集

回答ありがとうございます。 質問内容が大雑把でしたね。。。失礼しました。 ログインしていて、尚且つログインしているユーザがadmin属性を持っている場合にのみ、ユーザ削除のリンクがuser/showページに表示されるようにしたいです。 エラーの内容は構文エラーで、ページ全体のコードが赤く表示されているものです。 <%= if current_user.id == nil %> を <%= if current_user == nil %> でもだめでした。 発案していただいたコードでも同様のエラーになってしまいます。
winterboum

2020/01/11 12:52

とすると、エラーメッセージ全体、view全体を載せていただかないことには。
majikadezou

2020/01/11 13:06

失礼しました。載せさせていただきました。
winterboum

2020/01/11 13:14

ああ、<%= else %> か。 <% else %> ですね
winterboum

2020/01/11 13:17

なお。exit が気になります。exit はそこでrubyを終了するって意味ですから。 loginしていない時はどういう動作にしたいのですか? deleteをださないだけ? 画面表示もしないで戻る?
majikadezou

2020/01/11 13:23

deleteを出さないだけです
winterboum

2020/01/11 13:24

<%= if current_user %> <% if current_user.admin? && !current_user?(@user) %> | <%= link_to "delete", @user, method: :delete, data: { confirm: "本当に削除しますか?" } %> <% else %> <% end %> <% end %>
winterboum

2020/01/11 13:27

admin の時のみdeleteを出す、他のユーザは考えなくて良いのなら <%= if current_user.try(:admin?) && !current_user?(@user) %> | <%= link_to "delete", @user, method: :delete, data: { confirm: "本当に削除しますか?" } %> < % end %>
majikadezou

2020/01/11 13:32

ご丁寧にありがとうございます。 解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問