helper方法都没有意见accessable
问题描述:
你好我使用导轨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
答
我想这是因为错字的问题。您可以更改helper_method :logged_in?
到helper_method :logged_in
或更改def logged_in
到def logged_in?
。方法名称和参数helper_method
应该相同。
你的PagesController
应该延伸ApplicationController
,所以PagesController
可以有你在ApplicationController
中设置的所有东西。
答
{}
约: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 %>
希望,这清除了你的错误。
嗯,谢谢他们把它们都改为了logged_in?不幸的是仍然给出同样的错误 – user3637804
你有'pages_controller.rb'吗?请给我看。 – ShallmentMo
你的'PagesController.rb'应该扩展'ApplicationController.rb': 'class PagesController
ShallmentMo