polymorphic and sti problems.

I'm way back at Rails 2.3.5. I can move up to 2.3.11 if anyone thinks
that will help. My problem is this:

    class Entity < ActiveRecord::Base
      belongs_to :item, :polymorphic => true
    end

    class Name < ActiveRecord::Base
      has_one :entity, :class_name => "Entity", :as => :item
    end

    class Team < Name
    end

The has_one does not work. It searches for the base_class of item
"Name" instead of the class "Team". I see where these is a "trick"
where you can change item_type= in the documentation but that causes me
other problems.

I tried moving the has_one to Team but that didn't change anything.

Any suggestions?

What exactly is "not working" here? Polymorphic associations are
designed to store the class that's needed to retrieve the associated
record - storing the STI subclass instead of the base would mean that
the STI type was stored in *two* locations (both in the 'type' field
on the record, and in 'item_type' on the associated Entity record)
which is generally regarded as *bad*.

Note that base-class finds still return objects of subclasses (this
isn't C++ :slight_smile: ):

Name.find(some_team_id) # => a Team object

--Matt Jones

class Entity < ActiveRecord::Base
belongs_to :item, :polymorphic => true
end

class Name < ActiveRecord::Base
has_one :entity, :class_name => "Entity", :as => :item
end

class Team < Name
end

The has_one does not work. It searches for the base_class of item
"Name" instead of the class "Team".

What command are you executing when you get a problem with "it
searching" - what searches? What SQL gets produced in the log file?

I see where these is a "trick"
where you can change item_type= in the documentation but that causes me
other problems.

What problems?

I tried moving the has_one to Team but that didn't change anything.

hrmmm... that was my first thought...
If you try to associate Name objects, does that work okay?

Any suggestions?

A query: Why are you specifying the class_name? ... as far as I can
see, it shouldn't be necessary here (but shouldn't cause a problem
either...)