gpt4 book ai didi

ruby-on-rails - rails : ArgumentError - you can't define an already defined column

转载 作者:行者123 更新时间:2023-12-04 02:46:39 25 4
gpt4 key购买 nike

我有一个 Rails 6 应用程序 (6.0.0rc1)。它具有具有 has_many :through 关联的书籍和作者模型。我创建了一个连接表

rails g migration CreateJoinTableAuthorsBook author:references books:references

如您所见,我错误地命名了表格并且错误地引用了这本书。我删除了迁移并创建了一个新迁移
rails g migration CreateJoinTableAuthorsBooks author:references book:references

现在,当我运行迁移时,我得到
ArgumentError: you can't define an already defined column 'author_id'.

我搜索了整个 Rails 应用程序,但在任何地方都找不到“author_id”。我运行了之前的迁移(值不正确的迁移)。如何删除以前的“author_id”以便我可以成功运行迁移?

最佳答案

更新 问题可能在于新的迁移。在 Rails 5.2 中(我手边没有 Rails 6)rails g migration CreateJoinTableAuthorsBooks author:references book:references产生这样的迁移:

create_join_table :authors, :books do |t|
t.references :author, foreign_key: true
t.references :book, foreign_key: true
end
create_join_table :authors, :books已经创建了一个带有引用的表(尽管它们没有被声明为外键)。 t.references :authort.references :book是多余的。在 Rails 5.2 中,这种冗余被忽略了,但 Rails 6 可能没有。

出于这个原因,我建议调整您的迁移,以便正确声明和索引所有内容。
create_join_table :authors, :books, column_options: { null: false, foreign_key: true } do |t|
t.index [:author_id, :book_id]
t.index [:book_id, :author_id]
end

修复错误迁移的正常过程是首先使用 rails db:rollback 回滚迁移。 ,然后删除错误的迁移文件。回滚需要您回滚的迁移仍然存在(并且是可逆的)。

否则,使用 db/schema.rb 中的版本从新的开发数据库开始。与 rails db:reset .请注意,这会破坏您的开发和测试数据库;那应该不是问题。确保您的 db/schema.rb不包含来自错误迁移的更改,通常您可以通过从版本控制中 check out 来确保这一点。

最后,如果一切都真的搞砸了,包括 db/schema.rb , rails db:migrate:reset将重新运行您的所有迁移,重建 db/schema.rb新鲜,并为您提供新鲜的开发和测试数据库。

关于ruby-on-rails - rails : ArgumentError - you can't define an already defined column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57011310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com