(1) Да.
(2) Да, в зависимости от того, как вы справляетесь с полиморфизмом. Rails допускает STI (наследование одной таблицы), поэтому все подтипы событий могут наследовать отношение has_many. Связанная запись has_many может иметь много подтипов, и все они будут отображаться как отношения при вызове.
(3) has_many может использоваться вместе с полиморфным, они не являются взаимоисключающими.
(4) Опять же, эти два понятия не являются взаимоисключающими. На самом деле полиморфность необходима для вашего отношения принадлежащих вам. Ваша связанная запись должна включать в свою таблицу относительные_отношения и относительные_типы. Например, если вы используете STI, вы должны сделать это так:
class BaseClass < ActiveRecord::Base
has_many :foo
end
class SubClass < BaseClass
# inherits has_many :foo relation from BaseClass
end
class Foo < ActiveRecord::Base
belongs_to :base_class, polymorphic: true
end
class Bar < Foo
# inherits belongs_to :base_class from Foo
end
При вызове sub_class-instance.foos вы должны получить отношение ActiveRecord всех foos, включая подтипы.