1つの戦略は、ユーザーが最初にサイトにヒットしたときにゲストユーザーレコードを作成することです。
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タスクのようなものできれいにする必要のあるかもしれないゲストレコードの束を作成します。通常これは、ブラウザのクッキーのサイズ制限を回避するようなmemcachedのようにセッション・ストアを使用して、必要とするであろう -
namespace :users do
desc "Cleans out guest records"
task :cull => :environment do
User.guest.where('created_at > ?' 1.month.ago).destroy_all
end
end
別のアプローチは、セッション中にデータを格納することです。
出典
2016-09-21 18:55:06
max
http://railscasts.com/episodes/393-guest-user-record – max
@max実際には私のインスタンスでは動作しません。アマゾンを例に取る。あなたがアマゾンに行く瞬間、あなたは商品を買い物してカートに追加することができます。それは私が必要とする機能のうちの1つであり、私が[セッション]で作業しなければならないことを理解することに基づいています。しかし、私が知らないのは、そのセッション内でショートリストされた情報をどのように保存し、ユーザー(ログインしていない人)が送信ボタンに当たったときに電子メールで私に送信するかです。 – angkiki