Rails自定义更新操作生成get请求

时间:2012-12-03 22:20:37

标签: ruby-on-rails routing paperclip

我正在使用Paperclip存储名为“费用”的记录的图像 - 图像是费用的收据。

一切正常,但是当我去编辑费用时,我希望有一个链接来删除与该费用相关联的图像,所以在我的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请求的来源!想法?

0 个答案:

没有答案