2

Railscast Ep 381 に従って、複数ファイルのアップロードを Rails アプリに統合しようとしています。私のアプリでは、プロジェクト モデルには多くのステップがあり、ステップには多くの画像があります。画像モデルは、Carrierwave アップローダーを使用しています。

現在、edit_steps パス内から単一の画像ファイルをアップロードできます。しかし、新しい画像が追加されると edit_steps ページのギャラリーが自動的に更新されるように、アップロード インターフェイスを設計しようとしています (したがって、画像が選択されてもフォームはまだ送信されていません)。

Railscast のエピソードによると、画像を選択すると、各ファイルの create アクションが自動的に呼び出されるはずです。しかし、私のアプリケーションは明らかにそうしていません。Image モデルの create メソッドが確実に呼び出されるようにするにはどうすればよいですか?

step.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

image.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

images/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 %>
4

0 に答える 0