如何在部分内部使用方法?

时间:2013-08-13 19:40:43

标签: ruby-on-rails-4

我是铁轨初学者学习rails 4而我正在努力学习。我正在创建一个简单的博客,我想要一些简单的用户身份验证。我正在尝试在这里学习,所以我不想实现Devise等。我有一个标题部分来处理我的网站标题,我试图放一个注销链接,只显示用户是登录。我有一个简单的会话控制器,它有一个新的注册表单操作,一个创建操作,在匹配电子邮件和密码后设置当前用户并设置session [:user_id] = @ current_user.id,以及一个destroy操作这会使会议失败。在我的应用程序控制器中,我有一个像这样的方法

def logged_in?

  !session[:user_id].nil?

end

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

<% if logged_in? %>

  (My link)

<% end %>

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

2 个答案:

答案 0 :(得分:3)

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

2个解决方案:

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

    将控制器方法展示给视图
    class ApplicationController < ActionController::Base
      helper_method :logged_in?
      def logged_in?
        [...]
      end
    end
    

答案 1 :(得分:0)

你不能只使用:

if @current_user