Przypisanie id zamówienia do id użytkownika

Witam.

W ramach nabywania doświadczenia, utworzyłem prosty sklep internetowy, którego część struktury wygląda następująco:

models

class User < ActiveRecord::Base
 has_many :orders
end

class Order < ActiveRecord::Base
 has_many :order_items
 belongs_to :user
end

class OrderItem < ActiveRecord::Base
 belongs_to :order
 belongs_to :product
end

class Product < ActiveRecord::Base
 has_many :order_items
end

sessions_helper.rb

module SessionsHelper
 def log_in(user)
  session[:user_id] = user.id
 end

 def current_user
  @current_user ||= User.find_by(id: session[:user_id])
 end

 def log_out
  session.delete(:user_id)
  @current_user = nil
 end
#...     

sessions_controller.rb

class SessionsController < ApplicationController   
def create
 user = User.find_by(email: params[:session][:email].downcase)
 if user && user.authenticate(params[:session][:password])
 log_in user
 load_order
 redirect_back_or user
#...
 def destroy
  log_out
  session[:order_id] = nil
  redirect_to root_url
 end
#...

application_controller.rb

class ApplicationController < ActionController::Base
 protect_from_forgery with: :exception
 include SessionsHelper

 def load_order
  @order = Order.find_or_initialize_by_id(session[:order_id], user_id: session[:user_id])
  if @order.new_record?
   @order.save!
   session[:order_id] = @order.id
  end
 end
end

order_items_controller.rb

class OrderItemsController < ApplicationController
 before_action :load_order, only: [:create]

def create
  @order_item = OrderItem.new(product_id: params[:product_id], order_id: @order.id)
  respond_to do |format|
  if @order_item.save
   format.html { redirect_to @order, notice: 'Successfully added product to cart.' }
#...

Opiszę przykład działania aplikacji: użytkownik (id 1) dodaje “order item”, który wyświetla się w widoku orders/1. Po wylogowaniu się i powtórnym zalogowaniu, kolejne “order items” są dodawane do modelu Order o id 2 i są widoczne w orders/2. Reasumując, każde powtórne logowanie tworzy kolejną instancję modelu Order.

Dążę do tego, aby każdy użytkownik miał przypisany swój nr id do indywidualnego numeru zamówienia i po powtórnym zalogowaniu ponownie mógł dodawać produkty do tego samego “koszyka”, do którego miał dostęp przed wylogowaniem.

Próbowałem zastosować zmienną @current_user w metoddzie load_order, lecz wszystkie podejścia kończyły się errorem lub tym, że aplikacja nie działała w oczekiwany sposób.

Będę wdzięczny za pomoc w rozwiązaniu problemu.

Ja bym to zrobił tak:

Czyli jeżeli jest użytkownik zalogowany to bierze jego ostatni order, jeżeli jest już ten order skończony (czyli zapłacony) to tworzy nowy order i przypisuje go do użytkownika.

Przy tej konstrukcji raczej nie

Dzięki za podsunięcie pomysłu.

Poniżej zamieszczam rozwiązanie problemu:

def load_order
 if logged_in?
  user = current_user
  @order = Order.find_or_initialize_by_id(user.orders.last, user_id: session[:user_id])
  if @order.new_record?
   @order.save!
  end
 else
  redirect_to products_url, notice: "Please sign in"
 end
end