Как установить загрузку файла программно с помощью программы "Скрепка"

У меня есть задача грабли, чтобы засеять приложение со случайными данными, используя драгоценный камень faker. Тем не менее, у нас также есть изображения (например, логотипы), которые мы хотим загрузить в этой задаче грабли.

У нас уже установлен Paperclip, но у вас нет возможности загружать их программно в задачу rake. Любые идеи?

Ответ 1

Что вы подразумеваете под программным путем? Вы можете настроить метод, который будет проходить по пути в строке

my_model_instance = MyModel.new
file = File.open(file_path)
my_model_instance.attachment = file
file.close
my_model_instance.save!

#attachment происходит из нашей декларации скрепки в нашей модели. В этом случае наша модель выглядит как

class MyModel < ActiveRecord::Base
  has_attached_file :attachment
end

Мы выполнили аналогичные операции при загрузке проекта.

Ответ 2

Я делаю что-то подобное в граблированной задаче.

photo_path = './test/fixtures/files/*.jpg'
Dir.glob(photo_path).entries.each do |e|
  model = Model.find(<query here>)        
  model.attachment = File.open(e)
  model.save
end

Надеюсь, это поможет!

Ответ 3

Мне не нужно было писать метод для этого. Гораздо проще.

В модели →

Class Model_Name < ActiveRecord::Base
  has_attached_file :my_attachment,
  :params_for_attachment

В seed.db →

my_instance = Model_name.new
my_instance.my_attachment = File.open('path/to/file/relative/to/app')
my_instance.save!

Возможно, предыдущие ответы означали использование имени вложения, как определено в модели (вместо написания метода Model_name.attachment). Надеюсь, это ясно.