2011-02-15 106 views
8

不知道這裏發生了什麼,但我認爲我的嵌套窗體部分導致了CarrierWave的問題。Carrierwave上傳嵌套窗體?

當我用上傳的文件更新一個字段時,沒有任何反應:沒有錯誤,但沒有任何存儲。

我有一個與「個人」模型具有「has_many」關係的「家庭」模型。在 「個人」 模式有一個 「圖片報」 載:

class Individual < ActiveRecord::Base 
    belongs_to :household 
    mount_uploader :picture, PictureUploader 
end 

在我的觀點,我有:

= form_for @household, :html => {:multipart => true} do |f| 

,然後調用部分爲個人:

= f.fields_for :individuals do |builder| 
    = render 'individual_fields', :f => builder 

= f.submit 

局部只是有以下幾種:

= f.label :firstname, 'First' 
= f.text_field :firstname, :size => 10 
= f.label :lastname, 'Last' 
= f.text_field :lastname, :size => 15 
= f.file_field :picture 

上傳的圖片出現在參數中:

Started POST "/households/849" for 127.0.0.1 at 2011-02-15 15:45:16 -0500 
    Processing by HouseholdsController#update as HTML 
    Parameters: {"...6/1/2008; Active 6/6", "individuals_attributes"=>{"0"=>{"firstname"=>"Hannah", ... 
    "picture"=>#<ActionDispatch::Http::UploadedFile:0xb9fbd24 @original_filename="3.jpg", 
    @content_type="image/jpeg", @headers="Content-Disposition: form-data; 
    name=\"household[individuals_attributes][1][picture]\"; filename=\"3.jpg\"\r\nContent-Type: 
    image/jpeg\r\n", @tempfile=#<File:/tmp/RackMultipart20110215-6498-ba4bp>>, "_destroy"=>"false", 
    "id"=>"4077"}}}, "commit"=>"Update Household", "id"=>"849"} 

並存儲在上傳路徑下的tmp目錄下。它從來沒有保存到數據庫中,也沒有移到文件系統中。

任何想法?

回答

7

一些可能的解決方案:

  • 看起來你有,但只是爲了確保 - 你有對家庭模式accepts_nested_attributes?
  • 另外,你有沒有嘗試過,而不是部分本地化的問題?
  • 你在PictureUploader模型上有Rmagick或minimagick嗎?

此外,您還需要注意Carrierwave和嵌套窗體的已知問題,詳見Carrierwave Wiki

解決方法是添加下面的方法:

class Image < ActiveRecord::Base 
    mount_uploader :image, ImageUploader 

    def image=(val) 
    if !val.is_a?(String) && valid? 
     image_will_change! 
     super 
    end 
    end 

end 
class Person < ActiveRecord::Base 
    has_many :images 
    accepts_nested_attributes_for :images 
end 
+0

啊, 「DEF =圖像=(VAL)」 的東西爲我工作。我曾看到過這個入口,但不管它是否適用於我,無論出於何種原因。只是一個說明:它應該是「**接受** _nested_attributes_for」。謝謝! – thermans 2011-02-17 21:39:17