I have the following models:

class Address < ActiveRecord::Base
  validates_format_of :zip, :with => /\A[0-9]{5}\z/, :allow_blank =>
false
  validates_presence_of :address1
  validates_presence_of :state
  belongs_to :user
end

# the inherited records are in a subdirectory
class Addresses::ShipFromAddress < Address
  belongs_to :transaction
end

class Addresses::ShipToAddress < Address
  belongs_to :transaction
end

class Transaction < ActiveRecord::Base
  has_one  :ship_to_address, :class_name => "Address", :dependent =>
:destroy
  has_one  :ship_from_address, :class_name => "Address", :dependent =>
:destroy
end


I can access transaction.ship_to_address and
transaction.ship_from_address but the query that's generated for both
is:
SELECT `addresses`.* FROM `addresses` WHERE `addresses`.`transaction_id`
= 5 LIMIT 1

There's no expected type constraint.

However, if I do:
Addresses::ShipToAddress.find_by_transaction_id(5) the query is correct
as:
SELECT `addresses`.* FROM `addresses` WHERE `addresses`.`type` IN
('Addresses::ShipToAddress') AND `addresses`.`transaction_id` = 5 LIMIT
1

I have the workaround but it bugs me that the
transaction.ship_to_address doesn't work correctly.  The one thing that
may be wonky is that I'm putting "non-typed" ActiveRecord superclass
entries into addresses but that shouldn't be an issue?

-- 
Posted via http://www.ruby-forum.com/.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to