4

(画像は投稿に属します)

画像アップローダーは機能しますが、投稿編集で画像をアップロードする場合のみです。投稿が作成されたときに画像をアップロードしたい。

画像のアップロード ("<%= f.file_field :image %>") は新しい投稿フォーム内にあるため、投稿が作成される前に Carrierwave が指定されたパスに画像をアップロードしようとしていると推測されます。アップロードする場所を知っています。

ImageUploader ファイルは次のとおりです。

class TrackImageUploader < CarrierWave::Uploader::Base
  def cache_dir
   "#{Rails.root}/tmp/uploads"
  end

 include CarrierWave::RMagick

 #storage :file
 #storage :fog

 def store_dir
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
 end

 version :featured do
   process :resize_to_fill => [210, 145]
 end

 def extension_white_list
   %w(jpg jpeg gif png)
 end
end

上記のコードの store_dir は、Amazon S3 の適切なパスに画像を保存する役割を担っていると思います。

Post.id を取得できるように、投稿が作成された後に画像をアップロードするようにするにはどうすればよいですか?

4

2 に答える 2

1

私はまったく同じ問題を抱えていましたが、解決策を見つけました。

私の ImageUploader.rb は次のようになります: https://gist.github.com/egbertp/7572501。このファイルの 9 行目にinclude CarrierWaveDirect::Uploader. 直接アップローダー技術を使用することにより、サイト ユーザーは自分のファイルを Rackspace クラウドに直接アップロードします。ただし、アップロード時に Image モデルがまだデータベースに作成されていないため、エラーが発生します (ご想像のとおり)。

直接アップロード手法を無効にすることで、サイト ユーザーは画像を Web サーバーに送信し、その後、画像モデルが作成されてデータベースに保存されます。私の ImageUploader クラスでは、サムネイル バージョンを作成するために Web サーバーで画像を処理する必要があるため、これも必要です。

これがあなた、または将来誰かに役立つことを願っています。

よろしく、エグバート

于 2013-11-20T22:53:42.573 に答える
0

私も同じことをしましたが、画像を維持するためにcloudinarygemを使用しました。編集アクションを書いたコントローラーを見せてください。私はあなたに私のコードを見せていますuはursでそれを集計することができます

編集アクションのコントローラーで

def create
 @img = Image.new(params[:img])
  if @img.save
    redirect_to(:action => 'show')
  else
    render('c_view')
  end
end 

それが画像を撮っているところからの眺めで

<%= form_for :img, :url => {:action => "create"} do |f| %>
 <%= f.label "Upload an image"%>
    <%= f.hidden_field(:image_cache)%>
    <%= f.file_field :image %>      

 <%= f.submit "Submit", class: "btn btn-success"%>
    <% end %>

一部のビューページに画像を表示するために、これを使用しました

<% @img.each_with_index do |i|%>    
     <%= image_tag (i.image.url) %>
<%end%>
于 2012-12-12T15:07:37.240 に答える