Skip to content

Commit 997620e

Browse files
authored
Merge pull request #6265 from mamhoff/addressbook-inverse-dependent
Addressbook: Add foreign key, dependent/inverse_of options
2 parents c410165 + 97df766 commit 997620e

3 files changed

Lines changed: 33 additions & 8 deletions

File tree

core/app/models/concerns/spree/user_address_book.rb

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module UserAddressBook
55
extend ActiveSupport::Concern
66

77
included do
8-
has_many :user_addresses, foreign_key: "user_id", class_name: "Spree::UserAddress" do
8+
has_many :user_addresses, foreign_key: "user_id", class_name: "Spree::UserAddress", inverse_of: :user, dependent: :destroy do
99
def find_first_by_address_values(address_attrs)
1010
detect { |ua| ua.address == Spree::Address.new(address_attrs) }
1111
end
@@ -32,11 +32,29 @@ def mark_default(user_address, address_type: :shipping)
3232

3333
has_many :addresses, through: :user_addresses
3434

35-
has_one :default_user_bill_address, ->{ default_billing }, class_name: 'Spree::UserAddress', foreign_key: 'user_id'
36-
has_one :bill_address, through: :default_user_bill_address, source: :address
37-
38-
has_one :default_user_ship_address, ->{ default_shipping }, class_name: 'Spree::UserAddress', foreign_key: 'user_id'
39-
has_one :ship_address, through: :default_user_ship_address, source: :address
35+
has_one :default_user_bill_address,
36+
->{ default_billing },
37+
class_name: 'Spree::UserAddress',
38+
foreign_key: 'user_id',
39+
inverse_of: false,
40+
dependent: false
41+
has_one :bill_address,
42+
through: :default_user_bill_address,
43+
source: :address,
44+
inverse_of: false,
45+
dependent: false
46+
47+
has_one :default_user_ship_address,
48+
->{ default_shipping },
49+
class_name: 'Spree::UserAddress',
50+
foreign_key: 'user_id',
51+
inverse_of: false,
52+
dependent: false
53+
has_one :ship_address,
54+
through: :default_user_ship_address,
55+
source: :address,
56+
inverse_of: false,
57+
dependent: false
4058

4159
accepts_nested_attributes_for :ship_address
4260
accepts_nested_attributes_for :bill_address

core/app/models/spree/user_address.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
module Spree
44
class UserAddress < Spree::Base
5-
belongs_to :user, class_name: UserClassHandle.new, foreign_key: "user_id", optional: true
6-
belongs_to :address, class_name: "Spree::Address", optional: true
5+
belongs_to :user, class_name: UserClassHandle.new, foreign_key: "user_id", inverse_of: :user_addresses
6+
belongs_to :address, class_name: "Spree::Address"
77

88
validates_uniqueness_of :address_id, scope: :user_id
99
validates_uniqueness_of :user_id, conditions: -> { default_shipping }, message: :default_address_exists, if: :default?
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# frozen_string_literal: true
2+
3+
class AddAddressbookForeignKey < ActiveRecord::Migration[7.0]
4+
def change
5+
add_foreign_key :spree_user_addresses, :spree_addresses, column: :address_id, null: false
6+
end
7+
end

0 commit comments

Comments
 (0)