Ruby on rails 获取x用户最后五次登录的列表

Ruby on rails 获取x用户最后五次登录的列表,ruby-on-rails,ruby-on-rails-3.2,relational-database,Ruby On Rails,Ruby On Rails 3.2,Relational Database,所以我有一个任务,我应该输出一个列表,列出当前登录用户最近五次登录的情况 所以像这样: 人员A在12:00 12/12/12登录 人员A于2013年12月1日12:00再次登录 等等 这需要多达五个列表,一旦达到该限制,第一次登录(本例中为12.00 12/12/12)将被取消 到目前为止,我得到的是一个登录系统,带有记忆令牌和一些简单的登录授权(从头开始,然后回到Michael Hartl的教程中的一些细节)。现在,我可以列出用户当前登录的时间,但不能列出以前的“版本” 所以,这是我的观点:

所以我有一个任务,我应该输出一个列表,列出当前登录用户最近五次登录的情况

所以像这样:

人员A在12:00 12/12/12登录

人员A于2013年12月1日12:00再次登录

等等

这需要多达五个列表,一旦达到该限制,第一次登录(本例中为12.00 12/12/12)将被取消

到目前为止,我得到的是一个登录系统,带有记忆令牌和一些简单的登录授权(从头开始,然后回到Michael Hartl的教程中的一些细节)。现在,我可以列出用户当前登录的时间,但不能列出以前的“版本”

所以,这是我的观点:

<% if signed_in? %>
<h1>Welcome, <%= current_user.name %>!</h1>
<p>You were last logged in on:</p>
<ul>
    <li><%= current_user.lastlogin %></li>
</ul>
<%= link_to "Sign out", signout_path, method: "delete", class: "btn btn-large" %>
<% else %>
... (state for non logged in users)
<% end %>
我正在寻找解决这个问题的方法

我忘记提到的另一件事是,视图层需要在某种程度上进行修改,以便循环五次登录并按顺序输出,而不是在五个列表项中进行硬编码

我考虑的一件事是在一个表和一个用户对应的五个字段之间建立一个关系。然后在登录(或注销)时,获取:lastlogin值并将其推送到表中的字段中

然后,当所有字段都填写完毕后,查看第一个日期并将其替换为新日期

所以我想的是

def sign_in
  user.touch(:lastlogin)
  # push :lastlogin value into field in LoginsTable
  cookies.permanent[:remember_token] = user.remember_token
  self.current_user = user
end
我是RubyonRails的新手,可能离这里很远。我已经尝试过搜索像我在这里解释的功能,我得到的只是各种插件/完整的gem,当涉及到身份验证等问题时,这些插件/完整的gem可以处理这个问题和其他所有问题,在这种情况下,这并不是真的“需要”,因为这对我来说只是一个小时间的项目

干杯

编辑:

试图将其推入user_logins表的徒劳尝试

module SessionsHelper
  def sign_in(user)
    user.update_attribute(:lastlogin, Time.now)
    cookies.permanent[:remember_token] = user.remember_token
    self.current_user = user
    login_time = UserLogins.create(:login_time Time.now, :user_id current_user)
  end
end

现在这显然不起作用了。我也不太确定如何在视图层中循环登录时间。但是我想我最终会得到它的工作,现在你把我放在正确的轨道上:)

< P>如果你硬编码5个字段来保存最后5个登录日期,你会陷入混乱的泡菜中,而是考虑有一个表来存储所有用户的登录历史。一个带有
id
user\u id
login\u time
的简单表格“user\u logins”就足够了。 每次用户登录时写入此表,然后在您的视图中选择按
login\u time
排序的前5个结果,按降序排列

希望这有意义

在这条线上

login_time = UserLogins.create(:login_time Time.now, :user_id current_user)
您创建的哈希对象错误。Ruby 1.9哈希语法是

some_var: "some value" 
不是

祝你好运

还要稍微分解一下UserLogins对象。因为您使用的是Time.now,所以请让UserLogins对象设置时间,从而将您的方法简化为单一方法

旁注:


您不应该将模型对象命名为复数,因为在Rails中这会让人困惑

我更喜欢使用Desive gem,因为它维护身份验证和用户登录的历史记录,因此您可以轻松获得最后五名登录用户,并通过最后一次登录对用户模型和订单描述进行查询

哦,是的,这很有意义。我现在想的是创建一个logins表,其中有一个:datetime列和一个:user\u id列。然后设置在用户上有许多登录名,并在登录时写入logins表中的:datetime列。如果这有道理的话。我担心的一件事是实际的推送:最后登录到表中。我想不起来以前对Rails做过这样的事情。再说一次,也许我有..你也可以添加一个before过滤器或Observer或rake任务,或者一些可以清理不需要的登录表条目的东西,因为基于登录的东西会随着使用量的增加而快速增长!:)哦,这个根本不会用得太多。我现在遇到的问题是实际的时间推送。now或:lastlogin进入用户\登录(包含id、登录\时间和用户\ id列)。我将编辑这篇主要的帖子来展示我徒劳的推送尝试,它上面写满了错误的内容。嘿!现在正在做这件事,我意识到了我模型的多重名称,并纠正了这一点。我想我也解决了关系问题,所以现在我在一个用户ID中输入了大量登录时间。是时候尝试将它推到视图中并对其进行排序,然后对创建进行排序了。谢谢你指出语法错误。在过去的一周里,我一直深陷在这门语言中,但它对我来说仍然很陌生。不要放弃!我想你会发现Ruby是一种很好的语言。Rails有时可能是一只熊,所以不要混淆两者!哈哈,如果我可以建议的话,处理这些可能会对你的ruby部分有所帮助。另外,您正在做的部分工作可能可以通过稍微重命名来简化。基本上你会在columnHey Dave使用created_!谢谢你的好建议。我一定会检查一下Koans。目前,我正试图在col拉出创建的_,但没有任何效果。基本上我得到的是@user.user\u logins.created\u at。我尝试了几种不同的方法,但都有问题:未定义的方法“created_at”for#是否运行了rake db:migrate?:)我听说了Desive,但一开始我想自己做点什么(尽管我确实从Dave那里得到了很多帮助)。我肯定会在我的下一个项目中看看Desive和OmniAuth,它的规模比这个小东西还要大。但知道这种功能已经内置是件好事,谢谢:):)耶@KasperLewau;我们在这里分享知识,谢谢你的开篇。
module SessionsHelper
  def sign_in(user)
    user.update_attribute(:lastlogin, Time.now)
    cookies.permanent[:remember_token] = user.remember_token
    self.current_user = user
    login_time = UserLogins.create(:login_time Time.now, :user_id current_user)
  end
end
login_time = UserLogins.create(:login_time Time.now, :user_id current_user)
some_var: "some value" 
:some_var "some value"