Как использовать вспомогательные методы в миграции? - PullRequest
0 голосов
/ 23 апреля 2020

Как использовать вспомогательный метод, подобный этому, из application_helper.rb:

def upload_s3(region, file, bucket, filepath)
   s3 = Aws::S3::Resource.new(region: region)
   obj = s3.bucket(bucket).object(filepath)
   obj.upload_file(file)
end

Внутри миграции:

class CreateSeeds < ActiveRecord::Migration[6.0]
   pdf = "https://#{bucket}.s3.#{region}.amazonaws.com/#{record["filepath"]}"
   name = tokenize_by_delimiter_case(".", record["filepath"], 0)
   path = "items/#{name}"
   upload_s3(region, pdf, bucket, path)
end

Я знаю, что могу использовать метод модели, но я я не хочу копировать и вставлять кучу одних и тех же методов в модели только для миграции ... в противном случае у меня не было бы помощников.

Я получаю эту ошибку при попытке запустить мой миграция:

NoMethodError: undefined method `upload_s3' for #<CreateSeeds:0x00007fe4ee12bbc0>

1 Ответ

1 голос
/ 24 апреля 2020

Я бы посоветовал вам организовать вещи по-другому и создать класс обслуживания для обработки этих вещей, это не совсем то, для чего нужны миграции и помощники. Если вы создаете класс обслуживания, например, app/services, вы можете легко вызвать его из теста rake.

Ваш помощник

module TestHelper
  def test
    puts 'TEST'
  end
end

вашей миграции, include должен быть вне определение миграции

include TestHelper

class Test < ActiveRecord::Migration[6.0]
  def change
    test
  end
end
...