3

我有

def destroy 
    Event.find(params[:id]).destroy
    flash[:info] = "Event deleted" 
    redirect_to :back
end

而且我可以从 2 个不同的视图中删除一个项目。在一个视图中,它是一个项目列表,因此我可以使用:back和重新加载同一页面。但是另一个删除是在要删除的项目的视图上,所以一旦它消失了,我想去redirect_to不同的地方。

我的问题是如何redirect_to根据destroy方法的来源告诉 Rails 不同的路径?

就像测试一样,我尝试使用基于 html 中的 body 类的 if 语句,但实例变量没有被带入 destroy 方法(我假设),因为它不起作用。例如

def destroy
    if @body_class == 'one page'
        Event.find(params[:id]).destroy
    flash[:info] = "Event deleted" 
        redirect_to :back
    elsif @body_class == 'a different page'
        Event.find(params[:id]).destroy
        flash[:info] = "Event deleted" 
        redirect_to root_path
    end
end
4

1 回答 1

9

使用破坏链接传递参数。如果链接在列表中,如下所示:

<%= link_to 'destroy', event_path(event, :from=>"list"), :method=>:delete %>

如果在对象页面上:

 <%= link_to 'destroy', event_path(event), :method=>:delete %>

在控制器中:

def destroy 
    Event.find(params[:id]).destroy
    flash[:info] = "Event deleted" 
    if params[:from]=='list'
    redirect_to :back
    else
    redirect_to root_url 
end
于 2013-07-08T17:08:44.697 回答