2013-05-14 69 views
0

我有一個帶有設計的rails應用程序。當用戶登錄(user_signed_in?)時,我可以訪問它並檢索它的信息(例如current_user.last_search)。但我也想要一種方法來保存鏈接到會話的一些信息,例如用戶最後一次搜索。保持鏈接到未登錄用戶的信息un rails

現在,我有這樣的代碼:

<% if user_signed_in %> 
    <%= current_user.last_search %> 
<% else %> 
    <%= get_last_seach # some method to get the last search when user is not signed in %> 

這太冗長。我需要在很多地方這樣做,並且使用其他變量而不是last_search

我願做這樣的事情,而不是:

<%= my_current_user.last_search %> 

哪裏my_current_user是當用戶登錄的設計CURRENT_USER,否則它與信息鏈接到當前會話(通過Cookie)的用戶可用。

my_current_user會表現得像是:

# user starts new session on the website 
user_signed_in? # false 
my_current_user # Object User 
my_current_user.last_search # '' 

#user searches "pancakes" 
user_signed_in? # false 
my_current_user # Object User 
my_current_user.last_search # 'pankakes' 

#user logs in 
user_signed_in? # true 
my_current_user # Object User 
my_current_user.last_search # 'pankakes' 

#user logs off 
user_signed_in? # false 
my_current_user # Object User 
my_current_user.last_search # 'pankakes' or '', I don't really mind here 

這是一個很好的形式給出?你會建議什麼? 如果這是一個好主意,如何實現它?

回答

3

您可以在應用助手這樣創建一個輔助方法:

def last_search 
    user_signed_in? ? current_user.last_search : session[:last_search] 
end 

,並從你的控制器調用它。

除非您需要在註銷後再記住用戶的上次搜索並重新登錄,否則您可能會始終在所有用戶的會話中保持搜索(無論他們是否已登錄)。

+0

如果我想從控制器和視圖中訪問它,該怎麼辦? – 2013-05-14 08:45:54

+0

您可以在控制器中包含應用程序助手。如果您只需要在控制器中使用它,請將其添加到基礎控制器類中。 – 2013-05-14 08:48:03

+0

它看起來像「鐵軌方式」。但是使用'current_user.name'訪問用戶的名字並且'last_search'的** same **用戶的最後一次搜索感覺更爲奇怪。 – 2013-05-14 08:49:06