删除后Rails条件重定向

时间:2013-05-03 17:00:09

标签: ruby-on-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 }

如果用户从事件显示页面以外的所有页面删除,则该方法有效。因为您在尝试显示刚刚删除的记录时遇到错误。

所以,我正在尝试使用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)

感谢所有帮助!!

2 个答案:

答案 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]
...

希望这有帮助!