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