Ruby on Rails创建HABTM关系,目前无法找到表

时间:2014-08-07 21:20:08

标签: ruby-on-rails ruby activerecord migration

我正在尝试将belongs_to关系更改为has_and_belongs_to_many关系。以下是我尝试过的迁移:

Migration1

class RemoveSyndicateMemRef < ActiveRecord::Migration
  def change
    remove_reference :syndicate_members, :syndicate

    create_table :members_syndicates, id: false do |t|
        t.belongs_to :syndicate
        t.belongs_to :syndicate_member
    end
  end
end

迁移2:

class MultipleSyndicatesPerUser < ActiveRecord::Migration
  def change
    drop_table :members_syndicates

    create_table :members_syndicates, id: false do |t|
        t.references :syndicate, null: false
        t.references :syndicate_member, null: false

    end

  end
end

当我尝试使用任何HABTM方法时,我不断获得

ActiveRecord::StatementInvalid: Could not find table 'syndicate_members_syndicates'

错误。

我对Rails比较新,所以我不确定这里出了什么问题。任何帮助我指向正确方向的人都将不胜感激。

更新:

我修复了运行> syn.syndicate_members.build()的db表的名称后返回:

ActiveModel::MissingAttributeError: can't write unknown attribute `syndicate_id'

1 个答案:

答案 0 :(得分:0)

您的表名称不符合Rails的命名约定。要命名连接表,您应该按字母顺序加入另一个表的名称。

在这种情况下,'theyndicate_members_syndicates',因为您的表名为syndicate_memberssyndicates

你可以通过以下方式解决这个问题:

  • 您可以恢复迁移,将其从create_table :members_syndicates更改为create_table :syndicates_members_syndicates并再次运行。这将修复表名。

  • 您可以在:join_table => 'members_syndicates'has_and_belongs_to_many模型中的Syndicate声明中添加SyndicateMember。这告诉Rails不要将自动生成的名称用作表名,而是members_syndicates。在这种情况下,您无需更改表名。