2013-07-08 1 views
3

У меня естьRails перенаправление после уничтожения

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

И я могу удалить элемент из 2-х разных взглядов. На одном представлении это список элементов, поэтому я могу использовать :back и перезагружать одну и ту же страницу. Но другое удаление - на вид элемента, который нужно удалить, поэтому, как только он исчезнет, ​​я хочу, чтобы redirect_to где-то отличался.

Мой вопрос: как я могу указать Rails на другой маршрут redirect_to в зависимости от того, откуда идет метод destroy?

В качестве теста я попытался использовать оператор if, основанный на классе body в html, но переменная экземпляра не переносится в метод 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 

ответ

6

Передача параметров с сообщением об уничтожении. Если ссылка находится в списке, как это:

<%= 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 
+0

Perfect - спасибо за вашу помощь. Получил это! – matski