为什么在类名相同时,在开发中不会引发超类错误?

时间:2013-10-22 08:04:40

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

设置迁移类名称与模型类名称相同不会在开发环境中引发错误,而是在部署到生产期间,它会引发superclass mismatch

经过大量研究后,我想,可能是因为“ Lazy load ”,即为开发中的每个请求重新加载类。这是正确的还是完全没有其他原因。

来自capistrano的错误消息

  

类SimilarityMatrixInSubjects

的超类不匹配

代码段

db/migrate/20130915125533_similarity_matrix_in_subjects.rb

class SimilarityMatrixInSubjects < ActiveRecord::Migration
  def change
    create_table :similarity_matrix_in_subjects do |t|
      t.integer :subject_one_id
      t.integer :subject_two_id
      t.integer :similarity_score
      t.timestamps
    end
  end
end

修复错误的原因

https://github.com/shashanksingh/face_rec_server/blob/master/db/migrate/20130915125533_create_similarity_matrix_in_subjects.rb

1 个答案:

答案 0 :(得分:1)

superclass mismatch for class SimilarityMatrixInSubjects错误可能意味着您已经在代码库中拥有该类,或者至少您出于某种原因在您的环境中拥有该类。 当您尝试重新打开该类时会发生这种情况,从类中继承它,该类与之前的子类不同。 这就是为什么重命名迁移类会有所帮助。

两件事:

  • 我可以看到你创建了similarity_matrix_in_subjects表。也许,你有相应的AR模型?如果是这样,问题就很明显了。
  • 如果没有,请尝试在迁移中的类签名之前输出SimilarityMatrixInSubjects.ancestors - 您将看到它之前的子类。

希望有所帮助!