我正在尝试将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'
答案 0 :(得分:0)
您的表名称不符合Rails的命名约定。要命名连接表,您应该按字母顺序加入另一个表的名称。
在这种情况下,'theyndicate_members_syndicates',因为您的表名为syndicate_members
和syndicates
。
你可以通过以下方式解决这个问题:
create_table :members_syndicates
更改为create_table :syndicates_members_syndicates
并再次运行。这将修复表名。 或
:join_table => 'members_syndicates'
和has_and_belongs_to_many
模型中的Syndicate
声明中添加SyndicateMember
。这告诉Rails不要将自动生成的名称用作表名,而是members_syndicates
。在这种情况下,您无需更改表名。