したがって、現在ログインしているユーザーによる最後の5回のログインのリストを出力することになっているこのタスクがあります。
だからこのように:
人物Aは12.0012/12/12にログインします。
人物Aは12.0012/01/13に再度ログインします。
等々。
これは5つのリストまで機能する必要があります。その制限に達すると、最初のログイン(この場合は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)
そしてこれは私のsessions_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
この問題に取り組む方法についてのアイデアを探しています。
私が言及するのを忘れたもう1つのことは、5つのリスト項目でハードコーディングするのではなく、5つのログイン時間をループして順番に出力するようにビューレイヤーをある程度変更する必要があるということです。
私が考えていることの1つは、1人のユーザーに対応する5つのフィールドを持つテーブル間の関係を設定することです。次に、サインイン(またはサインアウト)時に: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にまったく慣れていないので、ここから離れているかもしれません。ここで説明しているような機能を検索してみましたが、認証などに関しては、これと他のすべてを処理するさまざまなプラグイン/完全な宝石だけが得られましたが、実際にはそうではありませんこの場合、それは私にとってほんの小さな時間のプロジェクトであるため、「必要」です。
乾杯!
編集:
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をループする方法が正確にはわかりません。しかし、あなたが私を正しい軌道に乗せたので、私はそれが最終的に機能するようになると思います:)