2011-09-17 95 views
1

我正在使用carrierwave將照片上傳到世界模型。我似乎無法獲得上傳表單權:Rails 3,mongoid,載波,嵌套對象形式

class World 
    include Mongoid::Document 
    embeds_many :photos 
    accepts_nested_attributes_for :photos 
end 

class Photo 
    include Mongoid::Document 

    mount_uploader :image, WorldPhotoUploader 

    embedded_in :world 
end 


# show.haml 
= form_for world, :html => {:multipart => true} do |f| 
    = f.fields_for world.photos.build do |photo| 
    = photo.file_field :image 

這給了我這種輸入形式:

<input id="world_photo_image" name="world[photo][image]" type="file"> 

不工作,我得到

Cannot serialize an object of class ActionDispatch::Http::UploadedFile into BSON. 

{"utf8"=>"✓", 
"_method"=>"put", 
"authenticity_token"=>"e2PzZlSY0NwiCqDWn7ZMNwqnypP+GC23PcMuy+uGyF0=", 
"world"=>{"photo"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x00000103182ac8 @original_filename="Black Box fish.jpg", 
@content_type="image/jpeg", 
@headers="Content-Disposition: form-data; name=\"world[photo][image]\"; filename=\"Black Box fish.jpg\"\r\nContent-Type: image/jpeg\r\n", 
@tempfile=#<File:/var/folders/IY/IY7PGAf2F9OD6CIKr1RQo++++TI/-Tmp-/RackMultipart20110917-57084-zwoyfy>>}}, 
"commit"=>"Upload", 
"id"=>"pluto"} 

輸入這似乎工作是:

<input id="world_photo_image" name="world[photos][][image]" type="file"> 

Bu T I我不知道如何創建的形式來獲取

回答

0

在你的世界控制器10.times {@world.photos.build},你會得到具有正確名稱10個輸入字段,感謝送給Radar @ irc.freenode.net #RubyOnRails

1

我有這個(與你的名字) :

<%= form_for @world, :multipart => true do |f| %> 
    <%= f.fields_for 'photos[0]' do |attachments| %> 
    <%= attachments.file_field :image %> 
    <% end %> 
<% end %> 

這給出了所需的格式。如果您事先不知道要上傳多少圖片,可以使用javascript來增加索引。

那麼你可能只是在你的控制器:

@world = World.new(params[:world]) 

但在你的模型不要忘了這行:

embeds_many :photos, cascade_callbacks: true 

this問題

作爲。

另外,對於嵌入式文檔而言,這是多餘的,因爲這是默認設置。

+0

添加'cascade_callbacks:true'解決了我的問題。 –