2016-09-21 7 views
0

こんにちは皆、私はウェブ上のあらゆる場所を検索しており、これに対する回答を見つけることができないようです。ユーザーがログインしていないカートチェックアウト機能

私はチュータープロフィールが掲載されているウェブサイトを持っています。私が達成したい機能は、ユーザーがユーザーをショートリストし、「チェックアウト」機能を持つことができるようにすることです。彼らの "カート"にチューターの数を追加した後、彼らは "チェックアウト"に進みます。彼らがそうするとき、彼らは彼らの名前/電子メール/ PhoneNumberに入力するよう促されます。先生のリストと共に彼らの情報と共に私にEメールが送られます。

私は同様の「ショッピングカート」機能について研究してみましたが、ほとんどのユーザーが現在ログインしているようです。また、この「チェックアウト」機能を処理し、その情報を送信する方法がわからないようですユーザーが希望するチューターをすべてリストに追加した後、私に教えてください。

すべてのソリューションとヘルプは非常に高く評価されます!どうもありがとうございました!

+0

http://railscasts.com/episodes/393-guest-user-record – max

+0

@max実際には私のインスタンスでは動作しません。アマゾンを例に取る。あなたがアマゾンに行く瞬間、あなたは商品を買い物してカートに追加することができます。それは私が必要とする機能のうちの1つであり、私が[セッション]で作業しなければならないことを理解することに基づいています。しかし、私が知らないのは、そのセッション内でショートリストされた情報をどのように保存し、ユーザー(ログインしていない人)が送信ボタンに当たったときに電子メールで私に送信するかです。 – angkiki

答えて

0

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 

別のアプローチは、セッション中にデータを格納することです。

1

既に言及したように、ゲストユーザーまたはストア情報はsessionにある(どちらの方法も実際は似ています)。それでもセッションで彼のIDを格納しますゲストユーザで

とDBのレコード(つまり、ブラウザでユーザーセッションが開いている間のみ使用されます)(wardenはあなたのためのことを行います)。必要に応じて、この目的のために他のテーブル/モデルを使用して、自分のユーザーセッションにそのIDを格納することができます。 guest userには、登録ユーザーと登録ユーザーの両方がいる場合に利点がありますが、ロジックは全く同じです。

あなたが登録せずにAmazonで買い物をすることができますことを述べましたが、ゲストユーザ戦略はまた、登録を必要とせず、それが(それはHello guest user #123だか、単にリンクSign Inを維持するかどうか)、それをユーザーに表示する方法を決定誰です心に留めておくべき

の観光名所:

  • あなたは無限のグローからusersテーブル を防ぐためにguest users古い「クリーンアップ」にすることもできます。
  • ゲストユーザー情報をロジック「マージ」ゲストユーザー情報に追加することができます(例:誰かがログインするのを忘れた場合、あなたはより大きな容量のなめらかするCookiesStorageから切り替える必要がありますセッションストレージの場合)でログインし、その後

をいくつかの項目をピックアップし、(クッキーは、右最大で4キロバイトですか?)。オプションは、心に留めておくべきDatabaseStorage、またはmemcachedの、またはのRedisなど

ものです:

  • あなたはクリーンアップ
  • それでもロジックを追加することができますを行う必要はありませんが、ゲストユーザを「マージ」あなたが登録ユーザとゲストユーザの両方をこのように扱いたい場合は、既存のユーザとの情報(例えば、ログインを忘れてアイテムを選択してログインした場合)
  • より良いオプション
関連する問題