1

carrierwave_direct gemを使用してファイルをS3に直接アップロードしていますが、すべてが順調に進んでいます。ただし、Amazonがで指定されたURLにリダイレクトする場合success_action_redirect、アップロードされたファイルをオブジェクトに関連付けていません。

私のコントローラーは次のようになります

def edit
  @excel_version = ExcelVersion.find(params[:id])
  @uploader = @excel_version.excel_everest_macro
  @uploader.success_action_redirect = edit_admin_excel_version_url
end


def update
  @excel_version = ExcelVersion.find(params[:id])
  @excel_version.assign_attributes(params[:excel_version])
  @excel_version.save
end

そして、ビューに= form_for @excel_version do |form|のような非表示のフォームフィールドがあります。= form.hidden_​​field:key

したがって、更新アクションでは、使用するだけ@excel_version.assign_attributes(params[:excel_version]) で、Amazonから返されたキーがモデルにうまく組み込まれます。ただし、@ excel_versionオブジェクトにマウントされたアップローダーはURLを取得せず、ファイルをダウンロードするためのリンクを設定できません。

返されたS3パラメーターを使用して、carrierwaveが通常行うように、ファイルをモデルに関連付ける方法に関する提案はありますか?

ありがとう!

PSここでの別の回答は、githubのcarrier_wave直接ドキュメントを読むことを提案しました。これは、この点で役に立たないことがわかりました。

4

2 に答える 2

0

画像をモデルに関連付けるには、Amazonのパラメーターを使用して画像リンクを作成するメソッドをコントローラーに作成します。

たとえば、次のことができます-

  def image_url
    respond_to do |format|
      format.json { render :json => { :filelink => "https://s3.amazonaws.com/#{params[:bucket]}/#{params[:key]}" } }
    end
  end

このコードが行うことは、amazonがimage_urlメソッドへのリダイレクトに成功すると、パラメーター「bucket」と「key」を使用して画像への正確なリンクを作成することです。(送信されるパラメーターには、キーとバケット名の両方があります)

これで、この画像のURLをビューの非表示オブジェクトに配置して、フォームがサーバーに投稿されたときにURLも一緒に投稿されるようにすることができます。モデルに関連付けることができるもの。

お役に立てれば。それは私のために働いた。

于 2013-03-07T17:23:54.367 に答える
0

だから私の問題はhidden_field :key、間違ったフォームにフィールドがあったことでした。direct_upload_form_for @uploaderファイルを S3 にアップロードするフォーム に誤ってフィールドを配置しました。

もちろん、ファイルを S3 に投稿した:keyにユーザーが戻るフォームのフィールドが必要です(つまり、メソッドに渡された URL で)。S3がparamsでキーを返すのはそこにあり、それをモデルに関連付けることができます。success_action_redirect

役立つ提案をありがとうございます。

于 2013-03-08T17:50:47.313 に答える