sanity check on setting up relationships please

I hate having to ask this but my eyeballs are spinning and I seem to be
getting some odd behavior.

a bit of the schema:

create_table "orders", :force => true do |t|
  t.column "billing_address_id", :integer
  ...
end

# single table inheritance here... AddressBilling & AddressShipping
create_table "addresses", :force => true do |t
  t.column "type", :string, :limit => 20
  ....
end

which of these pairs is correct?

class Order < ActiveRecord::Base
  has_one :billing_address,
                 :class_name => "AddressBilling"
end

class AddressBilling < Address
  belongs_to :order
end

------- OR ----------------

class Order < ActiveRecord::Base
  belongs_to :billing_address,
                    :class_name => "AddressBilling"
end

class AddressBilling < Address
  has_one :order
end

I thought the first was the correct but I'm a noob and neither seem to
be working as I'd expect.

When I do this in the controller:
@orders = Order.find(:all)

then in the view:
<% @orders.each do |order| %>
<tr><td><%= order.billing_address_id %></td></tr>
<% end %>

that works fine but then if I do this:
<% @orders.each do |order| %>
<tr><td><%= order.billing_address.id %></td></tr>
<% end %>

I get an error about billing address being a nil object? Yes the
billing address is there with the correct id.

seems odd to me... any help greatly appreciated and thanks in advance!
Tim

I hate having to ask this but my eyeballs are spinning and I seem to be
getting some odd behavior.

a bit of the schema:

create_table "orders", :force => true do |t|
  t.column "billing_address_id", :integer
  ...
end

# single table inheritance here... AddressBilling & AddressShipping
create_table "addresses", :force => true do |t
  t.column "type", :string, :limit => 20
  ....
end

which of these pairs is correct?

class Order < ActiveRecord::Base
  has_one :billing_address,
                 :class_name => "AddressBilling"
end

class AddressBilling < Address
  belongs_to :order
end

------- OR ----------------

class Order < ActiveRecord::Base
  belongs_to :billing_address,
                    :class_name => "AddressBilling"
end

class AddressBilling < Address
  has_one :order
end

I thought the first was the correct but I'm a noob and neither seem to
be working as I'd expect.

The second one is correct. While "Order HAS ONE billing address" seems
to read more logically, keep in mind that the has_one, belongs_to
stuff is really only there to tell AR about the relationships, not to
be semantically correct.

Think of it in this way: does the order need to know about its billing
address, or does a billing address need to know about its order? The
answer should be the former - an order needs to know where it should
be shipped to, more than an address needs to know what should be
shipped to it (see how that makes for awkward language as well?). From
this it follows that an order belongs_to a billing address.

The belongs_to side of the association is the one that stores the
foreign key. Consider the case (in the near future), where you have
repeat customers and you want to reuse their addresses.
Then, the has_one :order in the address object turns into a has_many :orders.

Cheers,
Max