一種策略是在用戶第一次訪問該網站時創建訪客用戶記錄。
這是一個使用Warden的基本示例。
class User < ActiveRecord::Base
has_secure_password, validations: false
enum status: [:guest, :registered] # ...
validates :email, presence: true, unless: :guest?
validates :password, presence: true, confirmation: true, unless: :guest?
end
class ApplicationController < ActionController::Base
helper_method :signed_in?, :current_user
prepend_before_action :authenticate!
before_action :create_guest_user!, unless: :signed_in?
def create_guest_user!
warden.set_user(User.create!(status: :guest))
end
def signed_in?
!current_user.nil?
end
def current_user
request.env['warden'].user
end
def authenticate!
warden.authenticate!
end
end
然後,當用戶完成結帳,你會更新users.status
列,以證明他們是善意,善意的用戶。
當然,這將創建一堆客人記錄,可能永遠不會被使用,可能需要用類似rake任務的東西清理掉。
namespace :users do
desc "Cleans out guest records"
task :cull => :environment do
User.guest.where('created_at > ?' 1.month.ago).destroy_all
end
end
另一種方法是存儲在會話中的數據 - 通常,這將需要使用會話存儲器中,如分佈式緩存以避免瀏覽器cookie的大小限制。
來源
2016-09-21 18:55:06
max
http://railscasts.com/episodes/393-guest-user-record – max
@max在我的實例中不起作用。以亞馬遜爲例。在你去亞馬遜的那一刻,你就可以開始購物並將它們添加到購物車中。這是我需要的功能之一,根據我的理解,我將不得不與[session]一起工作。然而,我不知道如何在該會話中存儲入圍信息,並在用戶(未登錄的用戶)擊中提交按鈕時通過電子郵件發送給我。 – angkiki