2012-02-15 54 views
3

我有一个照片模型,我想设置一个窗体,以便用户可以从同一个窗体创建多张照片。我在嵌套模型窗体上观看了Railscasts#196和197,但是这比我需要的更复杂,并且更多地处理包含多个模型的表单,而不是同一模型的多个对象。下面是我的一个简单的表单代码,它允许用户附加图像并创建一个新的Photo对象。我已经试过了fields_for并尝试了嵌套,但它看起来过于复杂,我无法正常工作。关于如何设置此表单以允许用户附加5个图像以创建5个新照片对象的任何想法?如何在Rails 3.1中以单一形式创建多个对象?

<%= form_for(@photo, :html => { :class => "form-stacked", :multipart => "true" }) do |f| %> 
    <div class="clearfix"> 
    <%= f.file_field :image %> 
    </div> 
    <div><%= f.submit "Upload", :class => "btn primary" %></div> 
<%end %> 

回答

1

我结束了使用plupload为多个文件(照片)用carrierwave上传。我使用了plupload-rails gem和下面的代码,并且一切正常:

<%= javascript_tag do %> 
    $(function(){ 
     var uploader = $('#uploader').pluploadQueue({ 
      runtimes : "html5, gears,flash,silverlight,browserplus", 
      max_image_size : '100mb', 
      url : "/photos", 
      unique_names : true, 
      multipart: true, 
      preinit: attachCallbacks, 
      multipart_params: { 
       "authenticity_token" : '<%= form_authenticity_token %>' 
      }, 

      flash_swf_url : '/plupload/js/plupload.flash.swf', 
      silverlight_xap_url : '/plupload/js/plupload.silverlight.xap' 

     }); //end initial script 

     //redirect after complete 
     function attachCallbacks(uploader) { 
      uploader.bind('FileUploaded', function(Up, File, Response) { 
       if((uploader.total.uploaded + 1) == uploader.files.length){ 
        var filesAdded = uploader.files.length; 
        window.location = "<%=j edit_individual_photos_path %>"+ '?files=' + filesAdded; 
       } 
      }); 
     } 
    }); //end function 
<% end %> 


<div class="" id="uploader"></div> 

希望这有助于某人开始行动。

0

我喜欢瑞恩贝茨Nested_Form宝石,因为我很懒。但我会做到这一点

<%= semantic_nested_form_for @user, :html => {:multipart => true} do |f| %> 


    <%= f.fields_for :photo %> 
    <p><%= f.link_to_add "Add Photo", :photo %></p> 


    <div class="actions"> 
    <%= f.submit :class => "btn-success" %> 
    </div> 

<% end %> 

然后局部

<div class="clearfix"> 
    <%= f.file_field :image %> 
</div> 

在问候您的留言_photo.erb:

我认为这是你在找什么,我是做你在这里(基于Railscast carrierwave插曲):

https://github.com/rbirnie/image-upload

基本来源:

图库型号

class Gallery < ActiveRecord::Base 
    attr_accessible :name, :paintings_attributes 
    has_many :paintings 
    accepts_nested_attributes_for :paintings 
end 

绘画模式:

class Painting < ActiveRecord::Base 
    attr_accessible :gallery_id, :name, :image, :remote_image_url 
    belongs_to :gallery 
    mount_uploader :image, ImageUploader 
end 

画廊编辑

<%= nested_form_for @gallery, :html => {:multipart => true} do |f| %> 
    <%= f.error_messages %> 
    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 

    <%= f.fields_for :paintings do |photo_form| %> 
    <%= photo_form.label :name %> 
    <%= photo_form.text_field :name %> 
    <%= photo_form.file_field :image %> 
    <%= photo_form.link_to_remove "Remove this photo" %> 
    <% end %> 

<p><%= f.link_to_add "Add a photo", :paintings %></p> 

    <p><%= f.submit %></p> 
<% end %> 

+0

我不确定这是我在找什么..我正在玩弄它一点点,无法让它工作。基本上,我想对两种不同的模型执行两种不同的操作:我想更新has_many照片的用户模型,并且我想创建两个新的照片对象。在使用您的代码时,我正在更新用户和现有照片,而不是创建新的Photo.rb对象 – kcurtin 2012-02-16 11:42:32

相关问题