У меня есть 3 класса:
class User < ActiveRecord::Base
has_many :events, :foreign_key => 'owner_id'
end
class Event < ActiveRecord::Base
belongs_to :owner, :class_name => 'User', :foreign_key => 'owner_id'
end
class Event::User < Event
end
Класс Event имеет поле 'type' и работает как STI.
Теперь я создаю событие:
Event::User.create(:owner => User.first)
=> #<Event::User id: 8, owner_id: 1, title: nil, type: "Event::User", created_at: "2010-07-05 00:07:32", updated_at: "2010-07-05 00:07:32">
А теперь я хочу получить владельца создаваемого события, но получить:
Event.last.owner
=> #<Event::User id: 1, owner_id: 1, title: nil, type: "Event::User", created_at: "2010-07-04 23:28:31", updated_at: "2010-07-04 23:28:31">
Журнал SQL дал мне следующее:
Event::User Load (0.4ms) SELECT * FROM "events" WHERE ("events"."id" = 1) AND ( ("events"."type" = 'Event::User' ) )
Похоже, что рельсы ищут сначала внутренний класс с таким именем, а потом уже внешний. Конечно, я могу изменить имя внутреннего класса, но это плохо для проекта, может быть, есть другой способ?