Я столкнулся с этим довольно странным поведением в приложении rails, над которым я работаю.
У меня есть несколько типов Post в иерархии наследования и Post has_many FeedEntries.
class Post < ActiveRecord::Base
has_many :feed_entries
end
class Post::BlogPost < Post; end
class Post::Discussion < Post; end
class Post::Article < Post; end
class FeedEntry < ActiveRecord::Base
belongs_to :post
end
Теперь, когда все настроено, как и раньше, вызов FeedEntry # post для сохраненного объекта всегда возвращает объект правильного (подкласса) типа, как я и ожидал.Однако, если я сделаю Post abstract (что на самом деле должно быть - суперкласс никогда не должен создаваться в этой модели):
class Post < ActiveRecord::Base
has_many :feed_entries
self.abstract_class = true
end
_ (примечание: я отредактировал этот фрагмент кода, чтобы учесть предложение Tomafro ниже, поскольку установка self.abstract_class кажется более идиоматичной, чем переопределение self.abstract_class ?. Однако такое же поведение все еще сохраняется.)
... затем вызов ассоциации FeedEntry # post для ранее сохраненного объекта возвращает объектТип сообщения.Это выглядит довольно задом наперед (учитывая, что объявление абстрактного класса конкретно указывает на то, что этот класс не должен создаваться), и я не могу придумать причину такого поведения.
Итак, есть ли причина для этого?я не получаю, или это ошибка, или что-то еще?