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


У меня есть задача рейка, чтобы засеять приложение случайными данными с помощью Faker gem. Однако у нас также есть изображения (например, логотипы), которые мы хотим загрузить в этой задаче rake.

У нас уже есть Paperclip set up, но нет способа загрузить их программно в задаче rake. Есть идеи?

3 64

3 ответа:

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

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

мы делали нечто подобное при начальной загрузке проекта.

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

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

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

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

Модель ->

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

в семени.db ->

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

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