Простой: обратной ссылки
link_to 'Back', :back, class: "btn btn-primary"
должен делать в этом случае. Он будет использовать функцию HTTP_REFERER
или Javascript для перехода на предыдущую страницу. См. documentation для получения дополнительной информации.
Update:
Я вам нужны некоторые исключения из правила «просто ссылка назад», вы должны создать собственное решение. Одним из таких решений может быть то, что вы используете link_to :back
по умолчанию , но переопределите его, приняв специальный параметр «back_path» в особых случаях. Для этого вы можете создать пользовательский помощник.
В следующем примере стандартная обратная ссылка используется по умолчанию, но позволяет предыдущей странице установить параметр back_path
, который будет пониматься помощником back_link
.
# application_helper.rb
def back_link(params, name: "Back", class: "btn btn-primary")
if params[:back_path].present?
link_to name, params[:back_path], class: class
else
link_to name, :back, class: class
ens
end
Теперь вы используете ссылку нормально в ваших просмотров:
<%= back_link(params) %>
И если вы хотите изменить поведение по умолчанию, просто передать back_path
параметров. Этот параметр будет передан на странице, на которую вы хотите вернуться. Затем вам нужно будет передать этот параметр через все последующие страницы и/или переадресовать.
Скажем, для нетривиального примера, что на странице клиента show
вы можете нажать на ссылку, чтобы создать новый счет-фактуру, а затем будет перенаправлен на страницу счета show
и оттуда вы хотите, чтобы нажать на ссылку назад и получить к клиенту show
страница снова.
Итак, добавьте ссылку на клиент показать страницу, с back_path
пар, указывая на эту страницу:
# views/clients/show.html.erb
<%= link_to 'New invoice', new_invoice_path(@client, back_path: client_path(@client)) %>
В виде new
страницы, вы должны добавить hidden_tag
передать на back_path
пары:
# views/invoices/_form.html.erb
<%= hidden_field_tag 'back_path', params[:back_path] %>
Далее в create
действий контроллера, вы также должны пройти эти параметры при перенаправлении:
# controllers/invoices_controller.rb
redirect_to invoice_url(@invoice, back_path: params[:back_path])
И, наконец, теперь вы можете использовать back_link
помощника, чтобы отобразить правильную ссылку:
# views/invoices/show.html.erb
<%= back_link(params) %>
Я знаю, что это некрасиво, но это так, как это ... Кроме того, это не идеальное решение, как правило, вы хотите иерархию обратных ссылок при просмотре страниц (и перейти на страницу с разных путей), и это решение решает только первую обратную связь. Но я думаю, что это на что можно опираться.
Это нормально, за исключением случаев, когда создается новый счет-фактура. Я перенаправляюсь на 'show', поэтому ссылка обратно оттуда возвращает вас к форме' new invoice form' – Aloalo