1

我正在尝试根据用户的来源在删除后重定向。

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

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)

感谢您的帮助!

4

2 回答 2

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

于 2013-05-03T17:15:13.587 回答
0

在您看来:

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

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

在控制器中:

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

希望这可以帮助!

于 2013-05-03T17:07:07.240 回答