Создание загрузок изображений Paperclip с поддельными данными - Ruby on Rails Populator / Faker Gems - PullRequest
19 голосов
/ 26 апреля 2011

В настоящее время я пытаюсь заполнить базу данных разработки проекта кучей поддельных данных, чтобы смоделировать, как она будет выглядеть и работать с сотнями статей / пользователей.Я искал различные драгоценные камни, чтобы выполнить задачу - например, Factory Girl, но документации очень не хватало, и я ее не получил - но в итоге использовал драгоценные камни Populator и Faker и выполнил следующую задачу rake ...

namespace :db do
   desc "Testing populator"
   task :populate => :environment do
      require "populator"
      require "faker"

      User.populate 3 do |user|
         name = Faker::Internet.user_name   
         user.name = name
         user.cached_slug = name
         user.email = Faker::Internet.email
         user.created_at = 4.years.ago..Time.now
      end
   end
end

Отлично работает ... для текстовых данных.Тем не менее, у всех пользователей есть аватар, который можно загрузить через приложение Paperclip, а также все обычные материалы имеют вложения в виде миниатюр таким же образом.

Я понимаю, что гем Populator просто делает прямое заполнение базы данных, а недля этого обязательно нужно пройти валидацию ActiveRecord .. поэтому я бы предположил, что Paperclip не сможет работать, чтобы сгенерировать все разные эскизы и необходимые (и загруженные в надлежащий каталог) для аватара, если я просто заполнил поле с помощью filepath в грабляхЗадача выше.

Есть ли способ заполнить поддельные изображения, с помощью Populator или другим способом?Или, может быть, способ указать грабли задачу на каталог изображений на моем жестком диске, чтобы автоматически генерировать случайные миниатюры для каждой записи?Пытался найти способ поиска в Google, но не нашел много информации по этому вопросу.

ОБНОВЛЕНИЕ

Окончательное решение, основанное на образе мышления pwnfactory...

namespace :db do
  desc "Testing populator"
  task :populate => :environment do
    require "populator"
    require "faker"

    User.populate 3 do |user|
      name = Faker::Internet.user_name
      user.name = name
      user.cached_slug = name
      user.email = Faker::Internet.email
      user.created_at = 4.years.ago..Time.now
    end

    User.all.each { |user| user.avatar = File.open(Dir.glob(File.join(Rails.root, 'sampleimages', '*')).sample); user.save! }
  end
end

Он в основном зацикливается и загружает аватары из каталога sampleimages для всех записей.

Ответы [ 3 ]

7 голосов
/ 26 апреля 2011

Чтобы связать случайное изображение в вашей задаче, вы можете попробовать следующее:

user.avatar = File.open(Dir.glob(File.join(Rails.root, 'sampleimages', '*')).sample)

, где sampleimages - каталог, содержащий аватары, которые должны быть связаны случайным образом

1 голос
/ 02 ноября 2014
user.avatar = File.open(Dir['app/assets/images/*.jpg'].sample)
0 голосов
/ 26 апреля 2011

Один из способов обойти это - поставить условие в мои взгляды.

Допустим, ваша модель "пользователь", и у нее есть аватар. Тогда вы можете сделать следующее:

<% if product.avatar.exists? %>
  ... show the attached photo
<% else %>
  .. show a default photo
<% end %>

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

...