我试图在删除后重定向,具体取决于用户来自何处。删除后的Rails条件重定向
这是当前的代码在事件控制器:
def destroy
@event = Event.find(params[:id])
@event.destroy
respond_to do |format|
format.html { redirect_to events_url }
format.json { head :no_content }
end
end
我改成了这个(感谢MrYoshiji):
format.html { redirect_to :back }
这工作,如果用户从除了所有页面删除活动显示页面。因为您在尝试显示刚刚删除的记录时出现错误。
所以,我试图用一个参数告诉破坏代码重定向到哪里。
我想这一点:
def destroy
@event = Event.find(params[:id])
@event.destroy
@return_url
respond_to do |format|
format.html { redirect_to @return_url }
format.json { head :no_content }
end
end
但是,我不知道如何@return_url传递作为一个展示页面上的link_to设置了一个param。
<%= link_to 'Delete', @event, params(@return_url => "some url"), confirm: 'Are you sure?', method: :delete, :class => 'btn btn-danger' %>
如何将网址作为参数传递?
谢谢!
UPDATE1
我改变了事件控制器这样:
def destroy
@expense = Expense.find(params[:id])
redirect_url = (request.referer.include?("#{@event.id}/show") ? events_url : :back)
@expense.destroy
respond_to do |format|
format.html { redirect_to redirect_url }
format.json { head :ok }
end
end
这重定向到正确的页面中的“删除事件”按钮上 - 除了当我点击显示网页上的按钮为事件。
重定向想要显示已删除的记录。
UDPATE2
确定这个工作对我的应用程序:
redirect_url = (request.referer.include?("/events/#{@event.id}") ? events_url : :back)
感谢所有帮助!
后'return_url =(request.referer.include?('show')?::back)'然后'redirect_to return_url' –
MrYoshiji
2013-05-03 17:08:56
@MrYoshiji几乎就在那里,但是这会得到任何'show' URL,不是吗? – fotanus 2013-05-03 17:10:16
对于嵌套路由,您没有'show'关键字,例如我的一个深层嵌套路由:'http://127.0.0.1:3000/settings/organizations/1/clinics/1/edit'但是你是对,它应该是'include?(“#{@ current_resource.id}/show”)' – MrYoshiji 2013-05-03 17:12:20