Hi, on Rails 2.2RC1 I've found a what appears to be a bug in
ActiveRecord STI classes:

class ItemCollection < ActiveRecord::Base
class Order < ItemCollection
class ReplenishmentOrder < Order

The problem is that instances of ReplenishmentOrder are initially not
found via Order.find(:id), as shown below.
After searching the subclass directly (second query), the SQL of
searching the parent class changes (see third query in log below).

Console:

>> Order.find(510)
ActiveRecord::RecordNotFound: Couldn't find Order with ID=510
        from /Users/zubin/ww/g2/vendor/rails/activerecord/lib/
active_record/base.rb:1528:in `find_one'
        from /Users/zubin/ww/g2/vendor/rails/activerecord/lib/
active_record/base.rb:1511:in `find_from_ids'
        from /Users/zubin/ww/g2/vendor/rails/activerecord/lib/
active_record/base.rb:590:in `find'
        from (irb):1
>> ReplenishmentOrder.find(510)
=> #<ReplenishmentOrder id: 510, parent_id: nil, user_id: 28,
payment_method_id: nil, billing_address_id: 1, shipping_address_id: 1,
type: "ReplenishmentOrder", status: "editing", ref: nil,
despatched_at: nil, created_at: "2008-10-28 04:42:54", updated_at:
"2008-10-29 05:04:30", total: #<BigDecimal:5d92998,'0.0',4(8)>,
freight_total: #<BigDecimal:5d9295c,'0.0',4(8)>, redeemed_total:
#<BigDecimal:5d92920,'0.0',4(8)>>
>> Order.find(510)
=> #<ReplenishmentOrder id: 510, parent_id: nil, user_id: 28,
payment_method_id: nil, billing_address_id: 1, shipping_address_id: 1,
type: "ReplenishmentOrder", status: "editing", ref: nil,
despatched_at: nil, created_at: "2008-10-28 04:42:54", updated_at:
"2008-10-29 05:04:30", total: #<BigDecimal:5d8ff54,'0.0',4(8)>,
freight_total: #<BigDecimal:5d8ff18,'0.0',4(8)>, redeemed_total:
#<BigDecimal:5d8fedc,'0.0',4(8)>>
>>

Log:

$ tail log/development.log
  Order Columns (185.4ms)   SHOW FIELDS FROM `item_collections`
  Order Load (97.8ms)   SELECT * FROM `item_collections` WHERE
(`item_collections`.`id` = 510) AND ( (`item_collections`.`type` =
'Order' ) )
  ReplenishmentOrder Columns (2.5ms)   SHOW FIELDS FROM
`item_collections`
  ReplenishmentOrder Load (0.4ms)   SELECT * FROM `item_collections`
WHERE (`item_collections`.`id` = 510) AND ( (`item_collections`.`type`
= 'ReplenishmentOrder' ) )
  Order Load (0.5ms)   SELECT * FROM `item_collections` WHERE
(`item_collections`.`id` = 510) AND ( (`item_collections`.`type` =
'Order' OR `item_collections`.`type` = 'ReplenishmentOrder' ) )

-Zubin


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" 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-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to