Rails アプリにモデルAddress
とモデルがあります。Order
注文には、請求先住所と配送先住所があります。私はこれをポリモーフィックな関連付けで実装する最も効率的な方法を見つけようとしています (他のモデルにも将来アドレスがあります)。これが私が思いついたコードです:
アドレス.rb:
class Address < ActiveRecord::Base
attr_accessible :line_1, :line_2, :city, :county, :postcode
# Also has an 'address_type' attribute
belongs_to :addressable, polymorphic: true
end
order.rb:
class Order < ActiveRecord::Base
has_many :addresses, as: :addressable
def delivery_address
addresses.where(address_type: 'delivery').first
end
def delivery_address=(address)
address.address_type = 'delivery'
addresses << address
end
def billing_address
addresses.where(address_type: 'billing').first
end
def billing_address=(address)
address.address_type = 'billing'
addresses << address
end
end
アドレスの追加:
Order.first.address = Address.new(line_1: 'My House', city: 'Cityville, county: 'Hazzard')
これは、もう一度呼び出してアドレスを変更しようとするとorder.delivery_address=
、タイプ「配信」の別のアドレスが追加されることを除いて、ほとんど機能します。また、もっとエレガントな方法が必要だと確信しており、アドバイスをいただければ幸いです。