0

我正在尝试在我的 Rails 应用程序中创建一个菜单栏,以显示Login用户何时未登录,以及Logout他们可以使用的操作,即AdminUsers等。我试图在我的应用程序布局中使用此代码(application.html.hamlapp/views/layout)

%ul{:class => 'nav'}
%li= link_to 'Home', :root
    - if logged_in?
        %li= link_to 'Logout', logout_url

但是,它给了我一个错误说明,

NoMethodError in Session#new
undefined method `logged_in?' for #<#<Class:0x007f771bbe0f70>:0x007f771bc6a1a8>

除了菜单本身之外,我不需要更改布局中的任何内容,因此我不想根据用户是否登录来呈现不同的布局。是否可以将logged_in?方法显示给application布局,或者以某种方式让布局知道用户是否登录?

4

1 回答 1

0

假设您使用 Devise 进行身份验证,正确的方法是user_signed_in?

编辑 :

控制器方法只能从控制器调用。但是,您可以将该方法的结果存储在实例变量中。在你的 ApplicationController 做

before_filter :login_check

def login_check
  @logged_in = logged_in?
end

现在在您看来,您可以检查@logged_in 是否为真,就像这样

%ul{:class => 'nav'}
%li= link_to 'Home', :root
    - if @logged_in
        %li= link_to 'Logout', logout_url
于 2013-06-21T22:58:32.990 回答