Создание загрузок изображений 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 во все записи.
Ответы
Ответ 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, а не беспокоюсь о том, что все изображения прикреплены ко всем пользователям.