一切都很好,但用于多图像上传的paperclip-mongoid不起作用

时间:2012-08-24 02:37:33

标签: ruby-on-rails mongoid paperclip

我认为一切都很好..但它不起作用。
我在github上传了整个文件 https://github.com/iom00/action2.git
我最近更新了gem。但它在轨道3.2上也存在同样的问题 Plz帮帮我〜!


投资组合模型

class Portf
  include Mongoid::Document
  field :title, type: String
  field :decs, type: String  

  attr_accessible :images
  embeds_many :images
  accepts_nested_attributes_for :images, :allow_destroy => true

end


图片模型

class Image
  include Mongoid::Document
  include Mongoid::Paperclip

  field :portf_id, type: Integer
  embedded_in :portf , :inverse_of => :images
  has_mongoid_attached_file :file
end

投资组合控制器

  # GET /portfs/new
  # GET /portfs/new.json
  def new
    @portf = Portf.new
    5.times { @portf.images.build }

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @portf }
    end
  end

  # GET /portfs/1/edit
  def edit
    @portf = Portf.find(params[:id])
    5.times { @portf.images.build }
  end

形式

  <%= form_for @portf, :html => { :multipart => true } do |f| %>
    <%= f.fields_for :images do |image| %>
             <% if image.object.new_record? %>
                   <%= image.file_field :file %>                                  
             <% end %>
   <% end %>

1 个答案:

答案 0 :(得分:1)

首先,您需要使images_attributes可用于质量分配,而不是images,因此您必须这样做

  attr_accessible :images_attributes

您可能还想在其中添加:title

此外,当您在嵌入式文档中有回形针附件时,您需要添加级联回调。来自https://github.com/meskyanichi/mongoid-paperclip

  

关于嵌入式文档的注意事项:如果您计划保存或更新父文档,则必须将cascade_callbacks:true添加到embeds_XXX语句中。否则,您的数据将被更新,但回形针功能将无法运行以复制/更新您的文件。

所以你需要这样做:

  embeds_many :images, :cascade_callbacks => true

您可以在此处详细了解级联回调:http://mongoid.org/en/mongoid/docs/relations.html#common

此外 - 目前mongoid-paperclip存在阻止问题https://github.com/meskyanichi/mongoid-paperclip/issues/32拉请求已存在,但尚未合并。因此,如果将其与Mongoid 3一起使用,您可能会偶然发现此错误。