diff --git a/core/app/models/concerns/spree/user_address_book.rb b/core/app/models/concerns/spree/user_address_book.rb index 3e8cb60efb5..23728edc12b 100644 --- a/core/app/models/concerns/spree/user_address_book.rb +++ b/core/app/models/concerns/spree/user_address_book.rb @@ -5,7 +5,7 @@ module UserAddressBook extend ActiveSupport::Concern included do - has_many :user_addresses, foreign_key: "user_id", class_name: "Spree::UserAddress" do + has_many :user_addresses, foreign_key: "user_id", class_name: "Spree::UserAddress", inverse_of: :user, dependent: :destroy do def find_first_by_address_values(address_attrs) detect { |ua| ua.address == Spree::Address.new(address_attrs) } end @@ -32,11 +32,29 @@ def mark_default(user_address, address_type: :shipping) has_many :addresses, through: :user_addresses - has_one :default_user_bill_address, ->{ default_billing }, class_name: 'Spree::UserAddress', foreign_key: 'user_id' - has_one :bill_address, through: :default_user_bill_address, source: :address - - has_one :default_user_ship_address, ->{ default_shipping }, class_name: 'Spree::UserAddress', foreign_key: 'user_id' - has_one :ship_address, through: :default_user_ship_address, source: :address + has_one :default_user_bill_address, + ->{ default_billing }, + class_name: 'Spree::UserAddress', + foreign_key: 'user_id', + inverse_of: false, + dependent: false + has_one :bill_address, + through: :default_user_bill_address, + source: :address, + inverse_of: false, + dependent: false + + has_one :default_user_ship_address, + ->{ default_shipping }, + class_name: 'Spree::UserAddress', + foreign_key: 'user_id', + inverse_of: false, + dependent: false + has_one :ship_address, + through: :default_user_ship_address, + source: :address, + inverse_of: false, + dependent: false accepts_nested_attributes_for :ship_address accepts_nested_attributes_for :bill_address diff --git a/core/app/models/spree/user_address.rb b/core/app/models/spree/user_address.rb index 41ca17ce8b3..70432f472ee 100644 --- a/core/app/models/spree/user_address.rb +++ b/core/app/models/spree/user_address.rb @@ -2,8 +2,8 @@ module Spree class UserAddress < Spree::Base - belongs_to :user, class_name: UserClassHandle.new, foreign_key: "user_id", optional: true - belongs_to :address, class_name: "Spree::Address", optional: true + belongs_to :user, class_name: UserClassHandle.new, foreign_key: "user_id", inverse_of: :user_addresses + belongs_to :address, class_name: "Spree::Address" validates_uniqueness_of :address_id, scope: :user_id validates_uniqueness_of :user_id, conditions: -> { default_shipping }, message: :default_address_exists, if: :default? diff --git a/core/db/migrate/20250530102541_add_addressbook_foreign_key.rb b/core/db/migrate/20250530102541_add_addressbook_foreign_key.rb new file mode 100644 index 00000000000..73d88369d1c --- /dev/null +++ b/core/db/migrate/20250530102541_add_addressbook_foreign_key.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddAddressbookForeignKey < ActiveRecord::Migration[7.0] + def change + add_foreign_key :spree_user_addresses, :spree_addresses, column: :address_id, null: false + end +end