2

Railsから始めます。HerokuでホストされているRailsアプリにPaperclipとS3を使用する簡単な質問があります。

添付ファイルを(本番環境と環境の両方で)アップロードできるようにすべてを同期しましたが、唯一の問題はアプリ/S3からファイルを削除することです。私は多くの検索を行いましたが、多くの実装にはチェックボックスが含まれています。また、管理者へのアクセスを制限するために、ファイルコントローラーを介してすべてを実行しています。

has_many添付ファイルを持つ単純なプロジェクトモデルを使用しています。

削除リンクをクリックすると、S3から「エラー:MethodNotAllowed。指定されたメソッドはこのリソースに対して許可されていません」というエラーが表示されます。

これが私の見解です:

<% @project.assets.each do |asset| %>
 <%= link_to File.basename(asset.asset_file_name), asset.asset.url %>
 <small>(<%= number_to_human_size(asset.asset.size) %>)</small>
 <%= link_to '[X]', asset.asset.url , confirm: 'Are you sure you want to delete this attachment?', method: :destroy %>

これが私の破壊アクションです:

def destroy
   @asset = Asset.find(params[:id])
   @asset.destroy
   flash[:notice] = "Attachment has been deleted."
   redirect_to(:back) 
end

プロジェクトモデルはかなり標準的です:

class Asset < ActiveRecord::Base
  # attr_accessible :title, :body

  attr_accessible :asset

  belongs_to :project
  has_attached_file :asset, :storage => :s3, :path => (Rails.root + "files/:id").to_s, :url => "/files/:id"
 end

ファイルを削除するためにここで他に何が欠けていますか?モデルに何かありますか?S3を使用しておらず、SQLiteまたはPGデータベースから削除した場合は、すべてうまく機能しました。

どんな助けでも大歓迎です、そしてありがとう!

4

1 に答える 1

2

MethodNotAllowedはHTTP405です。これは、S3が気に入らないことをしようとしていることを意味します。エラーは削除リンクにあると思います:

<%= link_to '[X]', asset.asset.url , confirm: 'Are you sure you want to delete this attachment?', method: :destroy %>

基本的に、HTTP破棄をS3上のファイルのURLに送信します。これは、実際にはアセットコントローラーに送信され、である必要があります:delete

試す:

<%= link_to '[X]', asset, confirm: 'Are you sure you want to delete this attachment?', method: :delete %>

次に、コントローラーでアセットの削除を処理する必要があります。

def destroy
   @asset = Asset.find(params[:id])
   @asset.destroy
   flash[:notice] = "Attachment has been deleted."
   redirect_to(:back) 
end

お役に立てれば!

于 2013-01-29T01:11:39.200 に答える