Проблема с загрузкой файлов во вложенной форме с использованием Rails3 с Mongoid и Carrierwave - PullRequest
1 голос
/ 21 июля 2010

У меня проблема с переносом приложения SQLlite Rails 3 в приложение Mongoid Rails 3.В версии SQLlite я легко могу включить форму загрузки изображения (используя Paperclip) из одной модели («изображение») в вложенную форму из другой модели («продукт»).Вот моя «новая» форма продукта:

  <%= 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 %>

А вот представление «show»:

    <% @product.images.each do |image| %>
      <%= image_tag image.productphoto.url(:gallerythumb) %><br />
    <% end %>

Когда я пытаюсь использовать те же представления продукта в моем приложении Mongoid Rails 3 (используя Carrierwave), я получаю следующую ошибку:

    TypeError in Stores#show: 
    can't convert nil into String
    <%= image_tag product.image.url(:gallerythumb) %>

Я уверен, что мои модели в версии Mongoid верны, потому что, если я добавлю строку (например, «имя») к моей модели «изображение» и гнездучто в форме «Продукт» это работает.Кроме того, я могу загрузить изображение в форму не вложенной модели.

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

2 голосов
/ 20 августа 2010

У меня просто была похожая проблема. Я думаю, что проблема не в загрузке изображений, а в том, что Rails не распознает изображения как массив. Если вы посмотрите на Rails-источник помощника fields_for, вы увидите, что он проверяет метод "_attributes =". Если это не так, форма будет опубликована как обычные поля, а не как массив (параметры будут «изображения» вместо «изображения [0]»)

Вы должны добавить следующую строку в вашу модель:

accepts_nested_attributes_for :images
0 голосов
/ 30 декабря 2010

Скорее всего, это проблема, с которой связан Леви - эта проблема характерна для устройств, в которых ваш загрузчик Carrierwave монтируется на дочерний документ во встроенной ассоциации, и вы сохраняете родительский документ, хотя вы явно не показываетеесли это то, как моделируются ваши данные, я подозреваю, что это так, поскольку вы заметили, что они работают с не вложенной формой (предположительно сохраняя дочерний документ, а не родительский).

Если вы копаетесь вобсуждения, связанные с этим вопросом, вы найдете некоторые предлагаемые обходные пути.Вот что я закончил, чтобы Carrierwave работал в этой ситуации для меня:

https://gist.github.com/759788

Полная заслуга в zerobearing2, суть которого я раздвоил, я просто внес небольшие изменения, чтобы получитьон работал в Rails 3.0.3 и прокомментировал мою суть с краткой информацией о соответствующих обсуждениях.

0 голосов
/ 25 ноября 2010

Это ошибка несущей или mongoid

https://github.com/jnicklas/carrierwave/issues#issue/81

...