2013-06-21 45 views
0

我試圖在我的Rails應用程序中創建一個菜單欄,以在用戶未登錄時顯示Login,並且Logout加上他們可用的操作,即AdminUsers,等我試圖在我的應用程序佈局使用此代碼(在app/views/layoutapplication.html.haml在Rails中顯示用於登錄用戶的不同菜單項

%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佈局,或者以某種方式讓佈局知道用戶是否登錄?

回答

0

你使用設計的認證假設,正確的方法是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 
我沒有使用`Devise`,剛剛入選`LOGGED_IN自定義方法
+0

? ' – josh

+0

@cacidol你在哪裏定義了自定義方法? – RedXVII

+0

'app/controllers'中的'application_controller.rb' – josh

相關問題