Так же, как совет, я думаю, что полиморфные таблицы соединений - это действительно плохая идея, и ее следует избегать, за исключением случаев, когда это строго необходимо. Мало того, что они очень трудно правильно проиндексировать, но они сделают каждый запрос, включающий их, на несколько градусов более сложным и намного сложнее для масштабирования. В идеале любые ваши полиморфные ассоциации никогда не будут использоваться для объединения двух таблиц.
Кроме того, использование has_and_belongs_to_many не рекомендуется, поскольку использование has_many: сквозное решение является гораздо лучшим решением в большинстве ситуаций.
Один из способов упростить это - объединить ваши модели Estate и Управляющего тела в одну таблицу, возможно, используя STI для различения этих двух. Таким образом, связь между документами и этой конкретной сущностью становится намного более очевидной.
Если это не практично, то лучше иметь две таблицы прямого соединения, а не полиморфную.
Полиморфные ассоциации лучше всего подходят для случайных отношений, которые один ко многим. Например:
class Example < ActiveRecord::Base
# This model has notes
has_many :notes, :as => :record
end
class Note
# Can be attached to any kind of record
belongs_to :record, :polymorphic => true
end
В этом случае примечание - это то, что может быть прикреплено к любому виду записи. Важно отметить, что он не используется в середине отношений, это конечная точка.