【问题标题】:Rails error in migration ActiveModel::UnknownAttributeError: unknown attribute迁移 ActiveModel::UnknownAttributeError: 未知属性中的 Rails 错误
【发布时间】:2020-07-15 17:52:02
【问题描述】:

我想删除activities 表中的列和索引。为此,我有以下迁移:

class RemoveUnnecessaryJourneyActivitiesRelations < ActiveRecord::Migration[6.0]
  def change
    remove_index :activities, :cms_journey_id
    remove_column :activities, :cms_journey_id, :bigint
  end
end

当我运行 rake db:migrate 时,它也会删除此列和索引,但是当我想通过 rake db:drop db:create db:migrate db:seedbin/rails db:setup 重置我的数据库时,我收到了一个错误:

rake aborted!
ActiveModel::UnknownAttributeError: unknown attribute 'cms_journey_id' for Activity.

【问题讨论】:

  • 这个错误在哪里?能给点代码吗?
  • 就像我写的 - 当我运行 rake db:drop db:create db:migrate db:seedbin/rails db:setup
  • 是的,但是您的例外来自哪里?你没有堆栈跟踪吗?试试rake db:drop db:create db:migrate db:seed or bin/rails db:setup --trace
  • 我的假设是您的代码中仍然有对cms_journey_id 的引用。运行迁移会触发此代码,这会导致错误,因为您不再拥有该列。我试图用堆栈跟踪做的是检查我的假设是否正确。但也许您可以在代码中搜索 cms_journey_id 并删除任何潜在的剩余引用?
  • 不,我搜索过,我的代码中没有对本专栏的任何引用

标签: ruby-on-rails


【解决方案1】:

最初是如何添加属性的?如果是通过迁移,看起来该文件已被删除。

您有两种选择 - 如果您想让上述迁移工作,您需要在创建属性之前插入一个(带有较早时间戳),然后运行此迁移以将其删除。

当然,更简单的选择是删除上述迁移。因为没有创建属性的迁移,您可以删除上述迁移,运行rake db:migrate,查看您的db.schema.rb 文件,您将在activities 表上看到没有名为cms_journey_id 的列。

【讨论】:

  • 我完全按照你写的做了,但没有——我的架构中有这个cms_journey_id。这就是我最初想删除此列的原因。
  • 原来我在seed.rb 中有一些参考资料,这就是问题所在。
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多