Rails 4.1.9 переименовывает таблицу ошибок при сквозных связях - PullRequest
0 голосов
/ 18 октября 2018

Хорошо, у меня было три таблицы: users, groups, groups_users. Я запускаю миграцию, чтобы переименовать groups_users в членство

rename_table :groups_users, :memberships

Все работает нормально, но эта ассоциация

has_and_belongs_to_many :groups, through: memberships, class: "Group"

выдает следующееошибка:

PG::UndefinedTable: ERROR:  relation "groups_users" does not exist

Я искал во всем проекте забытую ссылку на старое имя, но ничего.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

От rails giudes: https://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many

Самое простое практическое правило заключается в том, что вы должны установить отношение has_many: through, если вам нужно работать с моделью отношений как независимой сущностью.Если вам не нужно ничего делать с моделью отношений, может быть проще установить отношение has_and_belongs_to_many (хотя вам необходимо помнить, чтобы создать таблицу соединения в базе данных).

Вам следуетиспользуйте has_many: through, если вам нужны проверки, обратные вызовы или дополнительные атрибуты в модели соединения.

Я полагаю, что ваша модель Memership обладает большей функциональностью, чем просто модель соединения, поэтому вам следует использовать ассоциацию has_many :through.

0 голосов
/ 18 октября 2018

has_and_belongs_to_many ассоциация не имеет опции through, вам следует использовать опцию join_table.

has_and_belongs_to_many :groups, join_table: 'memberships'
...