2017-04-23 71 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 %> 

希望,这清除了你的错误。

相关问题