2012-02-29 105 views
3

我不确定嵌入类的控制器应该发生什么。传递的参数会显示所有嵌入的类属性,包括图像属性,但只有非图像参数才会保存在数据库中。这告诉我,这个问题是不是与ORM的(Mongoid在这种情况下)的选择,而是与我使用的载波方式:Rails:与载波的嵌套形式

Parameters: {"article"=>{"name"=>"New article", "comments_attributes"=>{"0"=>{"remote_image_url"=>"", "name"=>"Comment 1", "content"=>"comment content....", "image"=>#<ActionDispatch::Http::UploadedFile:0x10339d880 @headers="Content-Disposition: form-data; name=\"article[comments_attributes][0][image]\"; filename=\"dh.png\"\r\nContent-Type: image/png\r\n", @original_filename="dh.png", @tempfile=#<File:/var/folders/A1/A1SUPUTUFA8BYB5j+RD2L++++TI/-Tmp-/RackMultipart20120228-21178-1vckii1-0>, @content_type="image/png">}}, "content"=>"article content"}, "commit"=>"Create Article", "authenticity_token"=>"i14YuJs4EVKr5PSEw9IwKXcTbQfOP4mjbR95C75J2mc=", "utf8"=>"\342\234\223"} 
MONGODB (89ms) freedb['system.namespaces'].find({}) 
MONGODB (0ms) freedb['articles'].insert([{"name"=>"New article", "comments"=>[{"name"=>"Comment 1", "_id"=>BSON::ObjectId('4f4daf6a58001652ba000012'), "content"=>"comment content...."}], "_id"=>BSON::ObjectId('4f4daf6958001652ba000011'), "content"=>"article content"}]) 

父模型:

class Article 
    include Mongoid::Document 
    field :name, :type => String 
    field :content, :type => String 

    embeds_many :comments 

    accepts_nested_attributes_for :comments 
end 

子模型:

require 'carrierwave/mongoid' 

class Comment 
    include Mongoid::Document 
    field :name, :type => String 
    field :content, :type => String 

    field :image, :required => true 
    field :remote_image_url 

    embedded_in :article, :inverse_of => :comments 
    mount_uploader :image, ImageUploader 
end 

父控制器:

def new 
    @article = Article.new 
    @article.comments.build 
    end 

    def create 
    @article = Article.new(params[:article]) 
    end 

父窗体:

​​
+0

我面临同样的问题。 Dave ans为我工作。 http://stackoverflow.com/questions/6447278/uploading-multiple-files-at-once-to-rails-app-with-carrierwave-html5 – Tim 2012-02-29 10:10:13

回答

8

Carrierwave使用一些回调保存的图像和数据模型。默认情况下,嵌入式模型没有回调执行。您需要明确表示您的嵌入需要执行回调。

为此,请使用cascade_callbacks: true选项。

embeds_many :comments, cascade_callbacks: true 
+0

谢谢,这完全有帮助。 – noazark 2012-09-11 03:02:44

+0

非常感谢!这解决了这个问题。 – 2013-06-01 15:21:57