你好我正在使用rails 5,我想要使用帮助方法。
我得到的错误是
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
答案 0 :(得分:2)
我认为这是因为拼写错误。您可以将helper_method :logged_in?
更改为helper_method :logged_in
或将def logged_in
更改为def logged_in?
。方法名称和helper_method
的参数应该相同。
您的PagesController
应该延长ApplicationController
,因此PagesController
可以包含您在ApplicationController
中设置的所有内容。
答案 1 :(得分:0)
{}
周围的:user_id
应为[:user_id]
。由于此错误,您的current_user
方法已被破坏,因此在!!current_user
方法中调用logged_in?
并未给出预期结果。应用程序控制器中最有效的模式类似于:
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 %>
希望这可以解决你的错误。