0

我有一个带有设计的rails应用程序。当用户登录时(user_signed_in?),我可以访问它并检索它的信息(例如current_user.last_search)。但我还想要一种方法来保存一些链接到会话的信息,例如用户进行的最后一次搜索。

现在,我有这样的代码:

<% 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 %>

当用户登录时,Devise current_user 在哪里my_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

这是一个好方法吗?你有什么建议?如果这是一个好主意,如何实施?

4

1 回答 1

3

您可以像这样在应用程序助手中创建一个助手方法:

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

并从您的控制器中调用它。

除非您需要记住用户在注销然后再次登录后的最后一次搜索,否则您可能始终将搜索保持在所有用户的会话中(无论他们是否登录)。

于 2013-05-14T08:44:22.147 回答