У меня есть проблема при передаче направляющих SQLlite 3 приложения к направляющие Mongoid 3 приложения. В версии SQLlite я легко могу включать форму загрузки изображения (использующий Скрепку) из одной модели ('изображение') во вложенной форме из другой модели ('продукт'). Вот моя 'новая' форма продукта:
<%= form_for @product, :html => {:multipart => true} do |f| %>
<% f.fields_for :images do |image_form| %>
<%= f.label :productphoto %>
<%= f.file_field :productphoto %><br />
<% end %>
<% end %>
И вот 'выставочное' представление:
<% @product.images.each do |image| %>
<%= image_tag image.productphoto.url(:gallerythumb) %><br />
<% end %>
Когда я пытаюсь использовать те же обзоры продукта в своих направляющих Mongoid 3 приложения (использующий Carrierwave), я получаю следующую ошибку:
TypeError in Stores#show:
can't convert nil into String
<%= image_tag product.image.url(:gallerythumb) %>
Я вполне уверен, мои модели в версии Mongoid корректны потому что, если я добавляю строку (как 'имя') к моей модели 'изображения' и вложенному множеству, что в форме 'продукта', это работает. Кроме того, я могу загрузить изображение в невложенную образцовую форму.
Любая справка значительно ценилась бы!
У меня сама была похожая проблема. Я думаю, проблема не в загрузке изображений, а в том, что Rails не распознает: images как массивы. Если вы посмотрите на исходный код Rails помощника fields_for, вы увидите, что он проверяет наличие метода "_attributes =". Если этого нет, форма будет размещена как обычные поля, а не как массив (params будет «images» вместо «images [0]»)
Вам необходимо добавить следующую строку в вашу модель:
accepts_nested_attributes_for :images