2011-09-02 2 views
1

Мое приложение имеет как пользователей, так и корзину.Как я могу связать пользователя с корзиной?

В настоящее время нет связи между пользователями и тележками.

В настоящий момент, независимо от того, зарегистрирован пользователь или нет, имеется только одна корзина для покупок, текущий ток создается при добавлении продукта и создается порядок order_transaction, когда плата оплачена (успех или неудача) , В случае успеха новая корзина будет создана при следующем добавлении продукта в корзину.

Как я могу связать корзину с пользователем, поэтому у каждого пользователя есть новая тележка, созданная для них при добавлении продукта?

application_controller

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 

маршруты

get "log_in" => "sessions#new", :as => "log_in" 
    get "log_out" => "sessions#destroy", :as => "log_out" 
    get "sign_up" => "users#new", :as => "sign_up" 

    get "cart" => "carts#show", :as => "current_cart" 

    resources :orders 
    resources :line_items 
    resources :carts  
    resources :products 
    resources :order_transactions 

    resources :sessions 
    resources :users 

line_items_controller

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 

Спасибо за любая помощь его очень ценится!

ответ

0

Самый простой способ сделать это, чтобы сделать пользователь имеет телеге

class User < ActiveRecord::Base 
    has_one :cart 

    def current_cart 
    if self.cart.empty? 
     self.cart.create! 
    end 
    self.cart 
    end 
end 

class Cart < ActiveRecord::Base 
    belongs_to :user 

    def add_line_item(item) 
    etc... 
    end 
end 

class ApplicationController < ActionController::Base 
    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    def current_cart 
    current_user.current_cart if current_user.present? 
    end 
end 

Я рекомендовал бы это. Таким образом, у вас есть только ОДИН Вещь для отслеживания во время сеанса. Вы также должны попытаться перенести большую часть «бизнес-логики» DOWN на модельный уровень, чтобы было легче протестировать.

Смежные вопросы