2013-05-01 4 views
9

Есть ли способ включить перенаправление в link_to? Я хочу просто обновить текущую страницу после удаления. Но вы можете удалить одну и ту же запись из нескольких видов в приложении.Rails перенаправляет на предыдущую страницу (назад) после удаления

Это link_to:

<%= link_to 'Delete', expense, confirm: 'Are you sure?', method: :delete, :class => 'btn btn-mini btn-danger' %> 

Если нет, то есть ли смысл сохранить current_url во флэш [: fromurl], а затем положить, что в контроллере уничтожить раздел как это:

respond_to do |format| 
    format.html { redirect_to flash[:fromurl] } 
    format.json { head :no_content } 
    end 

Спасибо за помощь!

+2

Рассматривали ли вы сделать ссылку удаленной, так что вы можете справиться с освежающим определенным DIV с JS и таким образом вам не придется перезагружать всю страницу? –

+0

Может быть, 'redirect_to: back'? – MrYoshiji

+0

Звучит здорово - но я не собираюсь начинать это делать. Где вы могли бы указать мне объяснение? – Reddirt

ответ

24

Вы можете использовать redirect_to :back:

respond_to do |format| 
    format.html { redirect_to :back } 
    format.json { head :no_content } 
end 

Он использует заголовок "HTTP_REFERER" из запроса:

redirect_to :back 
# is a shorthand for: 
redirect_to request.env["HTTP_REFERER"] 
+0

MrYoshiji, мне было интересно, если вы захотите рассмотреть эти вопросы для меня? Я был бы очень признателен. http://stackoverflow.com/questions/16279090/rails-passing-information-from-a-view-to-a-form – Reddirt

+3

MrYoshiji - redirect_to: back работает, если вы удаляете любую страницу, кроме страницы показа. Потому что, назад пытается вернуть вас, чтобы показать запись, которую вы только что удалили. Я задал новый вопрос. – Reddirt

+0

@ Reddirt вы все узнали, как не получить ': назад', чтобы попытаться отправить вас на запись, которую только что удалили? – Gcap

2

В Rails 5 (Official Docs), вы можете использовать обновление: redirect_back(fallback_location: root_path)

Использование этого перенаправляет пользователя на ссылочную страницу (предыдущая страница, то же, что и redirect_to :back). Если это невозможно, оно затем перенаправляется в резервное местоположение, указанное в контроллере.

Примером метода в контроллере (это перенаправляет пользователя на корневого пути в качестве места запасного варианта):

def some_method 
    #Your Code Here 
    redirect_back(fallback_location: root_path) 
end 

Пример способа для удаления expense и перенаправление обратно, с запасной вариант на root_path:

def destroy 
    @expense.destroy 
    redirect_back(fallback_location: root_path) 
end 

Ниже приведены некоторые другие примеры fallback_location-х, которые могут быть использованы для перенаправления браузера обратно на конкретную страницу, если ссылающаяся страница не может быть перенаправлена ​​на:

redirect_back fallback_location: "http://www.google.com"  #Redirects to Google (or any website you specify) 
redirect_back fallback_location: "/images/screenshot.jpg" #Redirects to a local image 
redirect_back fallback_location: posts_path     #Redirects to the 'posts' path 
redirect_back fallback_location: new_user_path    #Redirects to the new user path 
Смежные вопросы