2016-04-13 33 views
1

私はこれについていくつかの類似の記事を見ましたが、私の問題を解決していないようです。logged_in_userログインしているユーザーのリンク先ページをバイパスしていません

問題 単に機能しません。何もエラーになりません。何も評価されず、他のもののためになぜか分かりません。

def show 
    if logged_in? 
     # raise #I raise an error here and nothing happens on the web page. Just to confirm this isn't working for my sanity. 
     redirect_to recipes_url 
    else 
     render template: "welcome/#{params[:welcome]}" 
    end 
    end 

機能LOGGED_IN:ここ

は私のウェルカムコントローラの定義とは?私/helpers/sessions_helper.rbに定義されています。ここでは

def logged_in? 
    !current_user.nil? 
    end 

CURRENT_USERです:

def current_user 
    if (user_id = session[:user_id]) 
     @current_user ||= User.find_by(id: user_id) 
    elsif (user_id = cookies.signed[:user_id]) 
    # raise #The test still pass, so this branch is currently untested. 
     user = User.find_by(id: user_id) 
     if user && user.authenticated?(cookies[:remember_token]) 
     log_in user 
     @current_user = user 
     end 
    end 

そして、私のルートは以下のとおりです。

get 'welcome/:welcome' => 'welcome#show' 
root :to => 'welcome#home' 

しないのはなぜこの作品?私がログインしているかどうかに関係なく、ウェルカムページにとどまります。私はlogged_inを知っていますか?これに基づいて動的なページに他のリンクがあるため、正しく評価されています。

編集:本当に変わったのはlogged_inですか?私の見解ではこのコントローラーでは動作しません。

ここには、アプリケーションレイアウトビューのナビゲーションのスニペットがあります。

<% if logged_in? %> 
     <li><%= link_to "Profile", current_user %></li> 
     <li><%= link_to "Log out", logout_path, method: "delete" %></li> 
    <% else %> 
     <li><%= link_to "Browse recipes", recipes_path %></li> 
     <li><%= link_to "Log in", login_path %></li> 
    <% end %> 

Picture of the resulting site

+0

deviseを使用していますか? – 7urkm3n

答えて

0

logged_inメソッドは正常に動作していました。これがうまくいかなかったのは、私のルートが「welcome#home」のビューに直接行き、コントローラをまったくバイパスしていたからです。

「welcome#show」というルートを作成するとすぐに、これを動作させることができました。

ありがとうございます!

0

logged_in_userすでにユーザが署名されている場合、実際には何もやってたり返却されていません。それはちょうどfalseと評価nilを返しますので、あなたのshowアクションにも到達するために方法はありませんredirect_to recipes_url声明。

logged_in?機能を使用しましたか?この動作するはずです、logged_in?はその名前が示す何を提供:

def show 
    if logged_in? 
     redirect_to recipes_url 
    else 
     render template: "welcome/#{params[:welcome]}" 
    end 
    end 

をあなたはUserという名前のモデルを使用していることを確認し、考案、devise_for :usersであなたのroutes.rbで定義されている工夫していると工夫をして、あなたのモデルに宣言している使用している場合少なくとも次のとおりです。

devise :database_authenticatable, 
     :registerable, 
     :rememberable, 
     :validatable 
+0

私は私の元の質問を編集しました。ありがとう!しかし、これはまだ私のために働いていないが、あなたは間違いなくlogged_inを使用することについて正しいですか?まだ分​​かりません... – blueduckyy

+0

'logged_in? 'はどこに/どのように定義されていますか? –

+0

上記を参照してください。私はその記事を編集した。これはhelpers/session_helpers.rbファイルに!current_user.nilとして定義されていますか? – blueduckyy

関連する問題