как ссылаться на изображение в seed.rb - PullRequest
1 голос
/ 14 апреля 2019

Я использую Carrierwave для загрузки изображений, связанных с моей моделью пользователя, которая имеет соответствующий атрибут picture, который содержит имя файла изображения в строковом поле.Обычно имя загруженного изображения хранится в public/uploads.
Теперь я хотел бы заполнить свою базу данных разработки примерами пользователей, включая связанный путь к изображению профиля.Я пытался сохранить свои pic1.jpg, pic2.jpg, pic3.jpg изображения в public/images и ссылку на эти изображения в db/seeds.rb как picture: '/images/pic1.jpg' и т. Д., Как предложил Грант Нойфельд в старом вопросе stackoverflow .В представлении изображение включается с использованием следующего кода:

<%= image_tag @user.picture.url if @user.picture? %>

Однако это не работает, изображение не загружается в поле зрения, поскольку атрибут изображения равен нулю.Я также пытался сохранить свои фотографии в app/assets/images и ссылаться на них как picture: 'pic1.jpg', picture: 'pic2.jpg', picture: 'pic3.jpg' в db/seeds.rb без результата.

Ниже мой db/seeds.rb файл:

User.create!(name:  "Example User",
         email: "example@railstutorial.org",
         password:              "foobar",
         password_confirmation: "foobar",
         admin: true,
         politics: 'left',
         car: true,
         pets: 'I like horses and bears',
         music: 'American country and folk',
         picture: 'pic1.jpg',
         profile: 'I like music and the Ruby and Python programming languages',
         activated: true,
         activated_at: Time.zone.now)

User.create!(name:  "Super-friendly User",
        email: "example-101@railstutorial.org",
        password:              "PassWord-0",
        password_confirmation: "PassWord-0",
        admin: true,
        smoker: true,
        politics: 'left',
        car: true,
        pets: 'I like turtles and whales',
        car_pets: true,
        music: 'Jazz and blues',
        picture: 'pic2.jpg',
        profile: 'I like music and drinking',
        activated: true,
        activated_at: Time.zone.now)

User.create!(name:  "Friendly User",
        email: "example-102@railstutorial.org",
        password:              "PassWord-0",
        password_confirmation: "PassWord-0",
        politics: 'right',
        car: true,
        pets: 'I like snakes and gorillas',
        music: 'pop and classics',
        picture: 'pic3.jpg',
        profile: 'I like music and hiking',
        activated: true,
        activated_at: Time.zone.now)

99.times do |n|
  name  = Faker::Name.name
  email = "example-#{n+1}@railstutorial.org"
  password = "password"
  User.create!(name:  name,
           email: email,
           password:              password,
           password_confirmation: password,
           activated: true,
           activated_at: Time.zone.now)
end

1 Ответ

4 голосов
/ 14 апреля 2019

Предположим, что вы сохраняете свои изображения в public/images, Carrierwave требует, чтобы вы передали объект ввода-вывода в модель Rails, поэтому для правильной настройки его в файле seeds.rb вам нужно сделать:

User.create!(
  name:  "Example User",
  email: "example@railstutorial.org",
  password:              "foobar",
  password_confirmation: "foobar",
  admin: true,
  politics: 'left',
  car: true,
  pets: 'I like horses and bears',
  music: 'American country and folk',
  picture: File.open(Rails.root.join('public', 'images', 'pic1.jpg')),
  profile: 'I like music and the Ruby and Python programming languages',
  activated: true,
  activated_at: Time.zone.now
)

Смотри, что я изменил picture на File.open(Rails.root.join('public', 'images', 'pic1.jpg'))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...