Rails 4.1.9通过关联重命名表错误

时间:2018-10-18 13:04:43

标签: ruby-on-rails ruby-on-rails-4 migration

好的,我有三个表user,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 :(得分:2)

has_and_belongs_to_many的关联没有through选项,您应该使用join_table选项。

has_and_belongs_to_many :groups, join_table: 'memberships'

答案 1 :(得分:1)

从轨道上来看,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关联。