2010-07-21 50 views
1

Im將一個SQLlite Rails 3應用程序轉移到Mongoid Rails 3應用程序時出現問題。在SQLlite版本中,我很容易在一個模型('產品')的嵌套表單中包含來自一個模型('圖像')的圖像上傳表單(使用Paperclip)。這是我的「新」產品形態:使用Rails3與Mongoid和Carrierwave嵌套形式的文件上傳問題

<%= 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的Rails 3應用程序(使用Carrierwave)我收到以下錯誤:

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

Im相當肯定我的模型在Mongoid版本是正確的,因爲如果我添加一個字符串(如「名」)我的「形象」模型和巢,在「產品」形式,它的工作原理。另外,我能夠將圖像上傳到非嵌套模型表單。

任何幫助將不勝感激!

回答

2

我自己也有類似的問題。問題不在於我認爲的圖片上傳,但問題在於Rails無法識別:圖片是數組。如果你看看fields_for helper的Rails源代碼,你會發現它檢查了一個方法「_attributes =」。如果不是有表格將被張貼在正常領域,而不是作爲一個數組(PARAMS將「圖像」,而不是「圖像[0]」)

你必須將下面一行添加到您的模型:

accepts_nested_attributes_for :images 
+0

+1這是我對ActiveRecord的體驗。檢查開發日誌,你可能會看到「無法批量分配值」 – mhenrixon 2011-05-09 16:37:35

0

這是最有可能的是路易鏈接到這個問題 - 這問題是特定於您的carrierwave上傳安裝在子文檔中的安排嵌入關聯並且您正在保存父項,雖然您沒有明確地顯示這是否是您的數據建模,但我懷疑是這種情況,因爲您注意到它可以與非嵌套窗體一起工作(假設保存子文檔,不是父母)。

如果您在與該問題有關的討論中進行了深入研究,您會發現一些建議的解決方法。這裏是我結束了得到Carrierwave在這種情況下,工作對我來說:

https://gist.github.com/759788

全部功勞是由於zerobearing2其要點我分叉的,我只是做了細微的變化,以得到它的Rails 3.0的工作。 3,並就我的要點對相關討論的摘要信息進行了評論。