我正在尝试根据用户的来源在删除后重定向。
这是事件控制器中的当前代码:
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 。
<%= link_to 'Delete', @event, params(@return_url => "some url"), confirm: 'Are you sure?', method: :delete, :class => 'btn btn-danger' %>
我将如何将 url 作为参数传递?
谢谢!!
更新1
我将事件控制器更改为:
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)
感谢您的帮助!