私は最近、以下を Paperclip の使用から Amazon S3 への Carrierwave アップロードに変換したので、carrierwave_direct gem を使用してから、Sidekiq または別のバックグラウンド処理 gem を使用できます。
class Release < ActiveRecord::Base
has_many :releases_tracks, :dependent => :destroy
has_many :tracks, :through => :releases_tracks, :order => "releases_tracks.position DESC"
accepts_nested_attributes_for :tracks, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => :true
accepts_nested_attributes_for :releases_tracks
end
class Track < ActiveRecord::Base
mount_uploader :track, TrackUploader
has_many :releases_tracks, :dependent => :destroy
has_many :releases, :through => :releases_tracks
end
/views/releases/track_upload.html.erb
<%= form_for(@release, :html => { :multipart => true }) do |f| %>
<h3>Upload Tracks for <%= @release.title %></h3>
<% index = 0 %>
<%= f.fields_for :tracks do |builder| %>
<%= @release.tracks[index].name %>
<%= f.file_field :track, :class => "file styled", :title => 'Select Track'%>
<% index += 1 %>
<% end %>
<%= f.submit "Upload Tracks", :class => "submit" %>
<% end %>
Carrierwave のアップロードは機能していますが、直接部分を機能させる方法がわかりません。提案されたフォームコードを組み込む方法がわからないためです。
<%= direct_upload_form_for @uploader do |f| %>
<%= f.file_field :track %>
<%= f.submit %>
<% end %
または、トラックまたはリリースコントローラーのどこに提案を配置します:
@uploader = User.new.track
@uploader.success_action_redirect = new_user_url
readme https://github.com/dwilkie/carrierwave_directと Railscast http://railscasts.com/episodes/383-uploading-to-amazon-s3はどちらも、最初にファイルをアップロードしてからデータベース エントリを作成することを示しています。私のアプリでは、db エントリが既に存在します。Railscastはそれが可能だと言っていますが、それを通り抜けていません。それが最初の問題です。
2 つ目は、一度に複数のファイルをアップロードする必要があることです。上記のコードはそれを実現しますが、非常に遅く、もちろん私のアプリはかなり役に立たなくなります。
誰でも助けることができますか?よろしくお願いします!