我正在尝试按照 Railscast Ep 381 将多文件上传集成到我的 Rails 应用程序中。对于我的应用程序,项目模型有很多步骤,步骤有很多图像。Image 模型使用的是 Carrierwave 上传器。
现在,我可以从 edit_steps 路径中上传单个图像文件。但是我正在尝试设计上传界面,以便在添加新图像后,edit_steps 页面上的图库会自动刷新(因此,一旦选择了图像但尚未提交表单)。
根据 Railscast 情节,当您选择图像时,它们应该自动为每个文件调用创建操作。但我的应用程序显然没有这样做。如何确保调用 Image 模型的 create 方法?
步骤.rb
class Step < ActiveRecord::Base
extend FriendlyId
friendly_id :number
attr_accessible :description, :name, :number, :project_id, :images_attributes
belongs_to :project
has_many :images
accepts_nested_attributes_for :images, :allow_destroy => :true
end
图片.rb
class Image < ActiveRecord::Base
attr_accessible :project_id, :step_id, :file, :caption
belongs_to :step
belongs_to :project
mount_uploader :file, FileUploader
end
意见/步骤/edit.html.erb
%= semantic_form_for [@project, @step], :html => {:multipart => true} do |f| %>
<%= f.inputs do%>
....
<div id="images">
<%= render :partial => 'images/image', :collection => @step.images.all %>
</div>
<div class="clear"></div>
....
<%= f.fields_for :images, Image.new do |image_form| %>
<%= image_form.file_field :file, multiple: true, name: "image[file]"%>
<%end%>
javascript/images.js.coffee
jQuery ->
$('#new_image').fileupload
dataType: "script"
控制器/images.controller
def create
@image = Image.create(params[:image])
end
图像/create.js.erb
<% if @image.new_record? %>
alert("Failed to upload image: <%= j @image.errors.full_messages.join(', ').html_safe %>");
<% else %>
alert("adding images")
$("#images").append("<%= j render(@image) %>");
<% end %>