lib/app/models/magic_addresses/association.rb in magic_addresses-0.0.12 vs lib/app/models/magic_addresses/association.rb in magic_addresses-0.0.13
- old
+ new
@@ -9,46 +9,82 @@
## C L A S S - M E T H O D S # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
module ClassMethods
def has_addresses
- has_many :addresses,
+ # has_many :addresses,
+ # as: :owner,
+ # class_name: "MagicAddresses::Address",
+ # dependent: :destroy
+
+ has_many :addressibles,
as: :owner,
- class_name: "MagicAddresses::Address",
+ class_name: "MagicAddresses::Addressible",
dependent: :destroy
+
+ has_many :addresses,
+ through: :addressibles,
+ source: :address
+
accepts_nested_attributes_for :addresses, allow_destroy: true, reject_if: :all_blank
end
def has_one_address
- has_one :address, -> { where(default: true) },
- as: :owner,
- class_name: "MagicAddresses::Address",
- autosave: true,
+ send :include, OneInstanceMethods
+ # has_one :address, -> { where(default: true) },
+ # as: :owner,
+ # class_name: "MagicAddresses::Address",
+ # autosave: true,
+ # dependent: :destroy
+
+ has_one :addressible,
+ -> { where(default: true) },
+ as: :owner,
+ class_name: "MagicAddresses::Addressible",
dependent: :destroy
- accepts_nested_attributes_for :address, allow_destroy: true, reject_if: :all_blank
+
+ has_one :address,
+ through: :addressible,
+ source: :address
+
+ accepts_nested_attributes_for :addressible, :address, allow_destroy: true, reject_if: :all_blank
end
def has_nested_address
- send :include, InstanceMethods
- has_one :address,
- as: :owner,
- class_name: "MagicAddresses::Address",
- autosave: true,
- dependent: :destroy
+ send :include, NestedInstanceMethods
+ # has_one :address,
+ # as: :owner,
+ # class_name: "MagicAddresses::Address",
+ # autosave: true,
+ # dependent: :destroy
+
+ has_one :addressible, -> { where(default: true) },
+ as: :owner, class_name: "MagicAddresses::Addressible", dependent: :destroy
+ has_one :address, through: :addressibles, source: :address
+
delegate :street, :number, :postalcode, :city, :district, :subdistrict, :state, :country,
:street=, :number=, :postalcode=, :city=, :country=,
to: :address, allow_nil: true
accepts_nested_attributes_for :address, allow_destroy: true, reject_if: :all_blank
alias_method_chain :address, :build
end
end #> ClassMethods
- ## I N S T A N C E - M E T H O D S # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
- module InstanceMethods
+ ## I N S T A N C E - M E T H O D S # # # # # # # # # # # # # # # # # # # # # # #
+ module OneInstanceMethods
+
+ # => http://stackoverflow.com/a/6989403/1470996
+ def build_address(params)
+ self.address = MagicAddresses::Address.new(params)
+ end
+
+ end #> InstanceMethods
+
+ module NestedInstanceMethods
# http://stackoverflow.com/a/4033761
def address_with_build
self.address_without_build || self.build_address
end