【问题标题】:Weird rails migration behaviour - migration is successful but still data doesn't populate奇怪的 Rails 迁移行为 - 迁移成功,但仍然没有填充数据
【发布时间】:2018-04-30 10:58:58
【问题描述】:

以下迁移文件成功运行,没有任何错误,甚至创建了列,但奇怪的是数据没有更新。

如果我在 rails 控制台中运行代码(忽略创建列),它的效果非常好。任何解释:

class AddSubjectListToTestType < ActiveRecord::Migration
  def change
    add_column :test_types, :subject_list, :integer, array:true, default: []

    type_hash = {
        "NEET" => ["Physics" , "Chemistry", "Botany", "Zoology"],
        "JEE" => ["Physics", "Chemistry", "Mathematics"],
        "CET" => ["Physics", "Chemistry", "Mathematics"]
    }
    TestType.all.each do |test_type|
        type_hash[test_type.name].each do |subject|
            test_type.subject_list << Subject.find_by_name(subject).id
        end
        test_type.save
    end
  end
end

【问题讨论】:

  • 它遍历所有test_types,所以我的第一个问题是你的数据库中有多少这样的?顺便说一句,将迁移与模型结合并不是最佳实践。模型可以改变,迁移不应该。
  • 我在测试类型中只有三个记录,并且所有三个记录的名称都列在 question_count_per_subject 的键中。

标签: ruby-on-rails ruby-on-rails-4 database-migration postgresql-9.1


【解决方案1】:

首先要检查的是您的 development.log 文件,一直滚动到底部以查看最新条目。

这是添加列的方法 https://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_column

取出所有其他东西并移至您的模型。

【讨论】:

  • 我已经可以添加列了。现在,如果我将代码移动到模型中,如何生成默认数据集。
  • 哦,好吧,没有意识到您正在尝试使用它来创建某种类型的数据集。请改用 db/seeds.rb。所以基本上创建列,然后填充 db/seeds.rb 文件,然后运行 ​​rails db:seed (rails 5.x) 或 rake db:seed 如果你在 rails 4 上。这将允许你用任何填充你的数据库你想要的初始数据。
  • 这里有一个链接,其中包含有关使用 db/seeds.rb 填充数据库的更多信息。 xyzpub.com/en/ruby-on-rails/3.2/seed_rb.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 2013-09-02
相关资源
最近更新 更多