如何在迁移中加载Hanami模型?

时间:2017-10-03 01:43:38

标签: ruby hanami hanami-model

我想更改表格中表格的结构,我需要使用旧表格的值回填一些新字段。所以,为此,我想在迁移中使用存储库。但是,似乎我需要加载Hanami Model来使用存储库,因为Hanami在运行迁移时没有加载它。

所以,现在我有了这个:

require_relative '../../lib/my_app/repositories/entity_repository'
require_relative '../../lib/my_app/entities/my_entity'

Mutex.new.synchronize do
  Hanami::Model.load!
end

Hanami::Model.migration do
  change do
    def backfill_data!
      repo = EntityRepository.new

      repo.all.map do |entity|
        repo.update entity.id, new_field_as_date: Date.new(entity.old_field)
      end
    end

    backfill_data!
  end
end

但是在运行此迁移时,我得到了

bundler: failed to load command: hanami (/Users/user/.rbenv/versions/2.4.1/bin/hanami)
Hanami::Model::Error: key not found: :person
# which is an association with the entity mentioned on the code

所以,我不知道现在要做什么。最大的问题是,如何迁移Hanami迁移数据?

1 个答案:

答案 0 :(得分:3)

我不知道这个具体问题,但我强烈不鼓励您在迁移中使用存储库。由于存储库对数据库表的当前架构很紧张,因此如果将来运行相同的迁移,它可能不起作用。

您应该直接使用数据库工具。这将保证迁移始终有效:

Hanami::Model.migration do
  up do
    run "UPDATE users SET last_login_at=(last_login_at - INTERVAL '1 day')"
  end

  down do
  end
end