0

我是一名 Rails 初学者,正在学习 rails 4,我正在尝试边做边学。我正在制作一个简单的博客,我想要一些简单的用户身份验证。我正在尝试在这里学习,所以我不想实现 Devise 等。我有一个标题部分来处理我的站点标题,我正在尝试放置一个链接到注销,该链接仅显示用户是否是登录。我有一个简单的会话控制器,它有一个用于注册表单的新操作、一个在匹配电子邮件和密码并设置 session[:user_id] = @current_user.id 后设置当前用户的创建操作,以及一个销毁操作这将取消会话。在我的应用程序控制器中,我有一个这样的方法

def logged_in?

  !session[:user_id].nil?

end

在我的 _header.html.erb 部分中,我有

<% if logged_in? %>

  (My link)

<% end %>

当我加载页面时,它告诉我找不到“logged_in?” 方法。有谁知道为什么?谢谢。

4

2 回答 2

3

默认情况下,控制器上的方法不会暴露给视图(您的部分视图是其中的一部分)。

2个解决方案:

  1. 将您的方法创建logged_in?为辅助方法,例如在AuthenticationHelper. 但是,这样做您无法从控制器访问它。
  2. 使用以下方法将控制器方法公开给视图helper_method

    class ApplicationController < ActionController::Base
      helper_method :logged_in?
      def logged_in?
        [...]
      end
    end
    
于 2013-08-13T19:56:34.390 回答
0

你不能只使用:

if @current_user
于 2013-08-13T20:17:07.380 回答