Вы не можете иметь Package has_many :tags
и Tag has_many :packages
одновременно. Правильно, вместо этого следует использовать либо has_and_belongs_to_many
, либо has_many through
. Разница между ними заключается в том, как вы хотите обрабатывать таблицу соединений.
Если его единственная цель - удерживать соединения между tags
и packages
, тогда можно использовать has_and_belongs_to_many
.
В противном случае, если вы хотите сохранить некоторую дополнительную информацию в таблице соединений (например, вес тега для пакета), то это может быть отдельная модель; таким образом, ассоциация должна быть has_many through
См. этот ответ также.
Как насчет связей с моделью User
: поскольку и Package
, и Tag
принадлежат User
, обе таблицы packages
и tags
материализуют эту связь в поле user_id
. Так что User has_many :packages
и User has_many :tags
. Других вариантов нет.