Подтвердить что ты не робот

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

В настоящее время я пытаюсь заполнить базу данных разработки в проекте кучей поддельных данных, чтобы имитировать, как она будет выглядеть и работать с сотнями статей/пользователей. Я искал разные драгоценности, чтобы выполнить эту задачу, например, 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

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

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

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

UPDATE

Окончательное решение, основанное на линии мышления 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 во все записи.

4b9b3361

Ответ 1

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

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

где sampleimages - это каталог, содержащий случайные случайные аватары

Ответ 2

user.avatar = File.open(Dir['app/assets/images/*.jpg'].sample)

Ответ 3

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

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

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

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