错误:注销时。
我试图在登录“ admin”时使用_admin_user_header
语句显示if
部分:
摘自:_header
部分。
<div class="collapse navbar-collapse d-flex justify-content-end">
<% if(current_user && current_user.role == 'admin') %> <== this
<%= render partial: 'admin_user_header' %> <== 2 lines
<% elsif(logged_in?) %>
<%= render partial: 'registered_user_header' %>
<% else %>
<%= render partial: 'anonymous_user_header' %>
<% end %>
</div>
执行<% if(current_user && current_user.role == 'admin') %>
显然可行,但是当我尝试从current_user帐户注销时,出现此错误:
ActiveRecord::RecordNotFound in HomeController#index
Couldn't find User with 'id'=
Extracted source (around line #25):
23 end
24
25 @current_user = User.find(session[:user_id])
26 end
27
28 def ensure_authenticated
Rails.root:
/Users/dangerrg/Documents/....
Application Trace | Framework Trace | Full Trace
app/controllers/application_controller.rb:25:in `current_user'
app/views/application/_header.html.erb:8:in `_app_views_application__header_html_erb__900908384298268245_70228604326660'
app/views/layouts/application.html.erb:12:in `_app_views_layouts_application_html_erb___299989914533477205_70228570235680'
我已经检查了其他帖子中的类似问题,寻找解决方案,并且尝试了不同的方法来完成此操作,但还没有成功。
我还在Rails控制台中检查了我的数据库,所有用户都有和:id
,并为其分配了各自的值。
在 application_controller.rb
...
helper_method :logged_in?, :current_user
def logged_in?
session[:user_id].present?
end
...
def current_user
if(@current_user.present?)
return @current_user
end
@current_user = User.find(session[:user_id])
end
...
在 home_controler.rb 中,这是唯一的方法:
def index
@tips = Tip.most_recent
end
在此方面,我将不胜感激。 预先感谢。
答案 0 :(得分:0)
current_user
仅在用户登录时有效。注销后,它将清除会话[:user_id]。这就是为什么您找不到用户的原因。
User.find(nil)
在调用查询数据库的当前用户方法之前,请尝试检查存在的会话[:user_id]。那会起作用:
if(logged_in? && current_user && current_user.role == 'admin')
或
def current_user
return unless logged_id?
if(@current_user.present?)
return @current_user
end
@current_user = User.find(session[:user_id])
end
我认为最好的选择是将渲染包装在if(logged_in?)
语句中:
<div class="collapse navbar-collapse d-flex justify-content-end">
<% if(logged_in?) %>
<% if(current_user && current_user.role == 'admin') %>
<%= render partial: 'admin_user_header' %>
<% else %>
<%= render partial: 'registered_user_header' %>
<% end %>
<% else %>
<%= render partial: 'anonymous_user_header' %>
<% end %>
</div>