2017-04-23 20 views
0

你好我使用導軌5和我捆綁使用的輔助方法。helper方法都沒有意見accessable

我得到的錯誤是

NoMethodError in Pages#home 
undefined method `logged_in?' for #<#<Class:0x007feb5210b7c0>:0x007feb52109d30> 

我想使用LOGGED_IN?在我的部分視圖導航欄中。我做錯了什麼,我不知道發生了什麼,我覺得這應該起作用。歡迎和感謝所有幫助,謝謝!

<nav class="navbar navbar-default"> 
    <div class="container-fluid"> 
    <!-- Brand and toggle get grouped for better mobile display --> 
    <div class="navbar-header"> 
     <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> 
     <span class="sr-only">Toggle navigation</span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     </button> 
     <a class="navbar-brand" href="#">Tier-List</a> 
    </div> 

    <!-- Collect the nav links, forms, and other content for toggling --> 

     <form class="navbar-form navbar-left"> 
     <div class="form-group"> 
      <input type="text" class="form-control" placeholder="Search"> 
     </div> 
     <button type="submit" class="btn btn-default">Submit</button> 
     </form> 
     <ul class="nav navbar-nav navbar-right"> 
     <% if logged_in? %> 
      <li><%= link_to "Home", root_path %></li> 
      <li><%= link_to "Create new article", new_article_path %></li> 
      <li><%= link_to "Logout", logout_path, method: :delete %></li> 
      <li><a href="#">Link</a></li> 
      <li class="dropdown"> 
       <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a> 
       <ul class="dropdown-menu"> 
       <li><a href="#">Action/</a></li> 
       <li><a href="#">Another action</a></li> 
       <li><a href="#">Something else here</a></li> 
       <li role="separator" class="divider"></li> 
       <li><a href="#">Separated link</a></li> 
       <% else %> 
      <li><%= link_to "Login", login_path %></li> 
      <li><%= link_to "Sign up", signup_path%></li> 
      <% end %> 
      </ul> 
     </li> 
     </ul> 
    </div><!-- /.navbar-collapse --> 
    </div><!-- /.container-fluid --> 
</nav> 

應用控制器

helper_method :current_user 
    helper_method :logged_in? 

    def current_user 
    @current_user ||= User.find(session{:user_id}) if session[:user_id] 
    end 

    def logged_in? 
    !!current_user 
    end 

    def require_user 
    if !logged_in? 
     flash[:danger] = "You must be logged in to perform that action" 
     redirect_to root_path 
    end 
    end 

PagesController.rb

class PagesController < ActionController::Base 
    def home 
    @articles = Article.all 
    end 

def tierlist 

    end 

end 

回答

2

我想這是因爲錯字的問題。您可以更改helper_method :logged_in?helper_method :logged_in或更改def logged_indef logged_in?。方法名稱和參數helper_method應該相同。

你的PagesController應該延伸ApplicationController,所以PagesController可以有你在ApplicationController中設置的所有東西。

+0

嗯,謝謝他們把它們都改爲了logged_in?不幸的是仍然給出同樣的錯誤 – user3637804

+0

你有'pages_controller.rb'嗎?請給我看。 – ShallmentMo

+0

你的'PagesController.rb'應該擴展'ApplicationController.rb': 'class PagesController ShallmentMo

0

{}:user_id應該是[:user_id]。因爲這個錯字的,你current_user方法被打破,所以後來在logged_in?方法調用!!current_user沒有給出預期的結果。在應用程序控制器,將工作最好的模式是這樣的:

def current_user 
    @current_user = User.find(session[:user_id]) if session[:user_id] 
end 

helper_method :current_user 

def current_user?(user) 
    current_user == user 
end 

然後在你看來,你會碰到這樣的:

<% if current_user?(@user) %> 
    #show stuff that only signed in Users see 
<% end %> 

希望,這清除了你的錯誤。