在Rails中为登录用户显示不同的菜单项

时间:2013-06-21 22:51:16

标签: ruby-on-rails

我正在尝试在我的Rails应用程序中创建一个菜单栏,以便在用户未登录时显示Login,并Logout加上他们可用的操作,即{{1} }},Admin等。我尝试在我的应用布局中使用此代码(Users中的application.html.haml

app/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?布局的方法,或以某种方式让布局知道用户是否已登录?

1 个答案:

答案 0 :(得分:0)

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

编辑:

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

before_filter :login_check

def login_check
  @logged_in = logged_in?
end

现在在您的视图中,您可以检查@logged_in是否为true,如此

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