所以我有这个任务,我应该输出当前登录用户最近五次登录的列表。
所以像这样:
个人 A 于 2012 年 12 月 12 日 12.00 登录。
个人 A 在 2013 年 12 月 1 日 12 点再次登录。
等等。
这需要最多五个列表,一旦达到该限制,第一次登录(在这种情况下为 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 %>
这是我的用户类:
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation, :lastlogin
has_secure_password
before_save { |user| user.email = email.downcase }
before_save :create_remember_token
...(validation following this)
这是我的 session_controller
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_to root_path
else
flash.now[:error] = 'Invalid email/password combination'
render 'new'
end
end
这里我们有 sign_in 函数
module SessionsHelper
def sign_in(user)
# user.update_attribute(:lastlogin, Time.now)
user.touch(:lastlogin)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
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
我对 Ruby on Rails 很陌生,可能离这里很远。我已经尝试搜索像我在这里解释的那样的功能,而我得到的只是各种插件/完整的 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
现在这显然行不通。我不太确定如何在视图层中循环访问 login_times。但我认为我最终会让它工作,现在你让我走上了正确的轨道:)