「経費」と呼ばれるレコードの画像を保存するためにペーパークリップを使用しています。画像は経費の領収書です。
すべてがうまく機能しますが、経費を編集するときに、その経費に関連付けられた画像を削除するためのリンクが必要なので、expense_controller に次のように記述します。
def delete_receipt_img
@expense = Expense.find(params[:id])
@expense.receipt_img.destroy
@expense.receipt_img.clear
@expense.save
redirect_to edit_expense_path(params[:id])
end
画像が経費に関連付けられている場合にのみ削除リンクを表示するパーシャルを使用して、経費の編集ページのビューを生成します。
<% if @expense.id.nil? || !@expense.receipt_img.file? %>
<%= f.label :attach_receipt %><br/>
<%= f.file_field :receipt_img %>
<% else %>
<%= image_tag @expense.receipt_img.url %>
<%= link_to "Delete Receipt",
delete_receipt_img_expense_url(@expense.id),
:method => :put %>
<% end %>
ルート ファイルでは、Rails ルーティング ガイドの例に従い、次のようなリンクを作成しました。
resources :expenses do
member do
put 'delete_receipt_img'
end
end
経費の編集ページに移動すると、「領収書の削除」リンクが次のように生成されます。
<a href="http://localhost:3000/expenses/1/delete_receipt_img" data-method="put" rel="nofollow">Delete Receipt</a>
すべて問題ないように見えますが、リンクをクリックすると、ルーティング エラーが発生します。
ルーティング エラー
[GET] "/expenses/1/delete_receipt_img" に一致するルートはありません
利用可能なルートの詳細については、rake ルートを実行してみてください。
この GET リクエストがどこから来ているのかわかりません! アイデア?