我希望在我的Ruby on Rails项目中查看对象的页面上有一个“删除”链接。我遇到了问题
<%= link_to "Delete", @member, :confirm => 'Are you sure?', :method => :delete %>
当方法运行时,加载它所在的页面,从而尝试加载不存在的对象。删除对象后,我想返回索引页面。
有什么想法吗?
答案 0 :(得分:2)
问题出在你的控制器上。
确保销毁操作重定向到索引,你应该没问题。
如果您使用脚手架来生成控制器,那么这应该已经为您完成了。 例如:
class MembersController < ApplicationController
...
def destroy
@member = Member.find(params[:id])
@member.destroy
respond_to do |format|
format.html{ redirect_to members_url}
format.xml { head :ok}
end
end
end
答案 1 :(得分:1)
在我的项目中,我倾向于在我的控制器中创建一个找到对象的before_filter
,如果它不存在,它会自动重定向回一个带有错误消息的默认索引URL,就像这样:
def find_object
@object = Object.find(params[:id])
rescue ActiveRecord::RecordNotFound => e
flash[:error] = "Sorry, that object was not found. Please try again."
redirect_to objects_path
end
在控制器中销毁对象后,您仍然需要进行重定向,但至少可以避免用户意外删除/查看不存在的对象并抛出异常。