簡體   English   中英

如何在遷移中加載Hanami Model?

[英]How to load Hanami Model in a migration?

我想更改表中表的結構,並且需要用舊值重新填充一些新字段。 因此,為此,我想在遷移中使用存儲庫。 但是,似乎我需要加載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遷移中遷移數據?

我不知道這個特定問題,但我強烈建議您不要在遷移中使用存儲庫。 由於存儲庫與數據庫表的當前架構緊密相關,因此如果將來運行相同的遷移,則它可能無法正常工作。

您應該直接使用數據庫工具。 這樣可以保證遷移始終有效:

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

  down do
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM