繁体   English   中英

删除后的Rails条件重定向

[英]Rails conditional redirect after delete

我试图根据用户来自哪里删除后重定向。

这是事件控制器中的当前代码:

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

但是,我不知道如何在显示页面的link_to中将@return_url作为参数传递。

    <%= 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)

感谢所有的帮助!

正如我所评论的,您可以执行以下操作:

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后销毁它。

您认为:

<%= link_to 'Delete', event_path(@event, url), confirm: 'Are you sure?', method: :delete, :class => 'btn btn-danger' %>

在这里,我将url变量作为参数传递给控制器​​。

在控制器中:

...
@return_url = params[:url]
...

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM