Organization
и Image
есть 1-to-1 relationship
. Image
имеет столбец filename
, в котором хранится путь к файлу. У меня есть такой файл, включенный в состав каналов: app/assets/other/image.jpg
. Как включить путь к этому файлу при посеве?Как проложить путь к изображению?
Я пытался в моем файле семян:
@organization = ...
@organization.image.create!(filename: File.open('app/assets/other/image.jpg'))
# I also tried:
# @organization.image.create!(filename: 'app/assets/other/image.jpg')
Оба генерируют ошибку:
NoMethodError: undefined method `create!' for nil:NilClass
я проверил с debugger
и может подтвердить, что это не@organization
, что равна нулю.
Как это сделать и добавить путь к файлу в модель Image
?
Update: Я попытался следующие:
@image = Image.create!(organization_id: @organization.id,
filename: 'app/assets/other/image.jpg')
И я также пытался:
image = @organization.build_image(filename: 'app/assets/other/image.jpg')
image.save
При посеве обе попытки произвести ошибку:
CarrierWave::FormNotMultipart: You tried to assign a String or a Pathname to an uploader, for security reasons, this is not allowed.
имя файла содержит путь, так что вам нужно сделать '@ organization.image.create (имя файла: 'приложение/активы/другие/image.jpg')!' ' – Kiloreux
См # я попробовал: 'в моем посте. Разве это не значит? Если я это сделаю, я получаю ошибку при посеве: 'NoMethodError: undefined method 'create!' для nil: NilClass' – Marty
с использованием File.open отличается от использования пути напрямую, и я думаю, что путь - это то, что вам действительно нужно в атрибуте filename. – Kiloreux