私はプログラミングに新しいスーパーです。ユーザーセッションにリンクしている私のアプリで働いているショッピングカートを手に入れようとしています。だから、各ユーザーは自分のショッピングカートを持つことができ、誰も他人のカートを見ることはできません。ショッピングカートをユーザーセッションにリンクさせるにはどうすればよいですか?
Railscastsのおかげで作業カートがありましたが、現在は独自のセッションで作成されています。だからあなたがいろいろなユーザーとしてログインすれば、使用中のカートは1つしかなく、すべてのユーザーがそれを共有しています。現在のような作成されて
その:私は限りへのuser_idを追加するなど、持っている
アプリケーションコントローラ
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
protect_from_forgery # See ActionController::RequestForgeryProtection for details
helper_method :current_user
helper_method :current_cart
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
def current_cart
if session[:cart_id]
@current_cart ||= Cart.find(session[:cart_id])
session[:cart_id] = nil if @current_cart.purchased_at
end
if session[:cart_id].nil?
@current_cart = Cart.create!
session[:cart_id] = @current_cart.id
end
@current_cart
end
end
ラインアイテムコントローラ
class LineItemsController < ApplicationController
def create
@product = Product.find(params[:product_id])
@line_item = LineItem.create!(:cart => current_cart, :product => @product, :quantity => 1, :unit_price => @product.price)
flash[:notice] = "Added #{@product.name} to cart."
redirect_to current_cart_url
end
end
カートのモデルと設定ユーザーhas_oneカートとカートはユーザーに属していますが、私は理解できませんカートを実際に稼動させるためにカートを作成する方法を変える必要があるのです。
編集 - セッションコントローラ
def create
user = User.authenticate(params[:username], params[:password])
if user
session[:user_id] = user.id
current_cart.user = current_user
current_cart.save
redirect_to root_path, :notice => "Welcome back!"
else
flash.now.alert = "Invalid email or password"
render "new"
end
end
def destroy
session[:user_id] = nil
redirect_to root_path, :notice => "Logged out!"
end
すべてのヘルプは非常に高く評価されます!
ありがとう!カートは、それを設定したユーザーのuser_idで保存されますが、同じブラウザーセッションにログインしていれば、別のユーザーが引き続き使用できます(カートのuser_idフィールドは、最後に何かを追加したユーザーに更新されます)。セッションを終了してログアウト時にカートを削除する方法はありますか? ** edit ** - session destroyメソッドにcurrent_cart.deleteを追加すると、再グルーグ中に「ID = 8のカートを見つけることができませんでした」というメッセージが表示されます。 – Dave
カートをユーザIDで更新するときにセッションから削除します。また、current_cartメソッドで新しいセッションカートを作成する前に、条件付きでカートを割り当てたユーザーを取得する必要があります。 – Codebeef