2015-09-11 3 views
4

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. 
+0

имя файла содержит путь, так что вам нужно сделать '@ organization.image.create (имя файла: 'приложение/активы/другие/image.jpg')!' ' – Kiloreux

+0

См # я попробовал: 'в моем посте. Разве это не значит? Если я это сделаю, я получаю ошибку при посеве: 'NoMethodError: undefined method 'create!' для nil: NilClass' – Marty

+0

с использованием File.open отличается от использования пути напрямую, и я думаю, что путь - это то, что вам действительно нужно в атрибуте filename. – Kiloreux

ответ

6

Как ваша ошибка clearl я рассказываю, в чем проблема. Получается, что у @organization еще нет изображения. Так что попробуйте

file = File.open(File.join(Rails.root,'app/assets/other/image.jpg')) 
image = @organization.build_image(filename: file) 
image.save 
+0

Спасибо @GB. Я попробовал, но он сгенерировался при посеве ошибки: «CarrierWave :: FormNotMultipart: вы пытались назначить String или Pathname для загрузчика, по соображениям безопасности это запрещено». – Marty

+0

ok дайте мне обновить ответ –

+0

см. Обновление, если оно работает –

3

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

1. Изменить ассоциацию одного до многих, чтобы сделать ваш код работает

2. Еще один должен сделать так:

@image = Image.create(#your code) 
@image.organization = @organization 

Следить за Link

+0

Спасибо! Пожалуйста, см. Обновление, которое я добавил в OP, для сообщения об ошибке, которое для меня генерирует параметр 2. – Marty

Смежные вопросы