我试图在删除后重定向,具体取决于用户来自何处。
这是事件控制器中的当前代码:
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 }
如果用户从事件显示页面以外的所有页面删除,则该方法有效。因为您在尝试显示刚刚删除的记录时遇到错误。
所以,我正在尝试使用params告诉destroy代码在哪里重定向。
我正在尝试这个:
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
但是,我不知道如何在展示页面的link_to中将@return_url作为参数传递。
<%= 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)
感谢所有帮助!!
答案 0 :(得分:5)
正如我评论的那样,您可以执行以下操作:
def destroy
@event = Event.find(params[:id])
@event.destroy
redirect_url = (request.referer.include?("#{@event.id}/show") ? events_url : :back)
respond_to do |format|
format.html { redirect_to redirect_url }
format.json { head :no_content }
end
end
(我不确定您是否可以在删除后立即访问@event.id
,如果没有,请在设置redirect_url
答案 1 :(得分:0)
在您看来:
<%= link_to 'Delete', event_path(@event, url), confirm: 'Are you sure?', method: :delete, :class => 'btn btn-danger' %>
这里我将url
变量作为参数传递给控制器。
在控制器中:
...
@return_url = params[:url]
...
希望这有帮助!