ゲストユーザーを編集させない

はじめに

編集ボタンを隠すやり方もあるが、"編集画面を作っている"と、ポートフォリオを見る人へ伝えたかったので、編集ボタンを表示させて、それを押したら→リダイレクト→「ゲストユーザーは編集できません」のメッセージを表示。というやり方で実装しました。

前提:

ゲストユーザーのpathは'users/2'とする。編集は、'users/2/edit'。
email: smooth_login@example.com

もし、user/showにあるユーザー画面で、プロフィール編集ボタンを押してきた場合

router

ゲストログインを、smooth_loginと表していたため、smoothとルートを定義しました。

get '/smooth' => 'users#smooth', as: 'smooth_edit'

controller

def smooth
    flash[:danger] = "簡単ログインしたユーザーは編集できません。"
    redirect_to request.referrer || 'users/2'
  end

view(作らなくてもmethod: :getでいけるかも。。)

smooth.erb.html

#空

もし、'users/2/edit'と直接リンクを打たれた場合

user/edit.html

<% if @user.email == "smooth_login@example.com" %>
<p>ゲストユーザーは編集できません</p>
<%= link_to :back do %>
  <button>戻る</button>
<% end %>
<% else %>
##ここに通常の編集コード
 <% end %>

最後に

もっといいやり方があるかもしれません。