Forum: Ruby on Rails composed_of, aggregate object isn't saved

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Jason P. (Guest)
on 2009-02-26 23:01
I am relatively new to rails and I cannot figure out what is going on
here. I am using the composed_of method in an ActiveRecord class to
create two aggregate properties: shipping_address and billing_address.
The object properties are getting populated from the form and validation
is working - no problem. When I call order.save, though, everything is
being saved except the address fields. I am not getting any errors - it
is just that none of the address info is saved to the database. I even
ran script/console and manually created and saved an order there - same
result.

Anyone have any ideas? Below is the Order class. Thanks.


class Order < ActiveRecord::Base
  belongs_to :payment_type
  has_many :line_items, :dependent => :delete_all

  composed_of :shipping_address,
    :class_name => 'Address',
    :mapping =>
  [
    %w(street, street),
    %w(street2, street2),
    %w(city, city),
    %w(state, state),
    %w(zip, zip)
  ] do |p|
    Address.new p[:street], p[:street2], p[:city], p[:state], p[:zip]
  end

  composed_of :billing_address,
    :class_name => 'Address',
    :mapping =>
  [
    %w(billing_street, street),
    %w(billing_street2, street2),
    %w(billing_city, city),
    %w(billing_state, state),
    %w(billing_zip, zip)
  ] do |p|
    Address.new p[:street], p[:street2], p[:city], p[:state], p[:zip]
  end

...

end
Jason P. (Guest)
on 2009-02-26 23:21
Oh, forgot: I'm running rails 2.2.2, mysql 5.0.45, OSX

and here is the address class

class Address
  attr_reader :street, :street2, :city, :state, :zip

  def initialize(street, street2, city, state, zip)
    @street = street
    @street2 = street2
    @city = city
    @state = state
    @zip = zip
  end

end
This topic is locked and can not be replied to.