Nano Hash - криптовалюты, майнинг, программирование

Кнопка «Назад» пропуска страницы в приложении Ruby on Rails

Я нашел много общих сообщений, предполагающих, что это связано с перенаправлениями. Я считаю, что это может быть связано с тем, как у меня настроена форма.

На странице plans.html.erb у меня есть форма с четырьмя отправками, каждая из которых отправляется в одно и то же место с разными параметрами:

<%= form_with url: :affiliate_select_plan, class: "mx-auto" do |f|  %>

    <!-- Paid Plans -->
    <% @plans.each_with_index do |plan, i| %>
        <%= f.button 'Select Plan', value: plan[:name], type: 'submit' %> 

    <% end %>
<% end %>

У меня есть настройка affiliate_select_plan_path в моем routes.rb:

devise_scope :affiliate do
  post 'affiliate/select_plan', :to => 'affiliates/registrations#select_plan'
end

Форма успешно обращается к методу select_plan в контроллере, который перенаправляет ее к new_affiliate_registration_path, передавая необходимые параметры.

def select_plan
    redirect_to new_affiliate_registration_path(plan: plan_params[:button])
end 

Вызывается метод new в контроллере, направляющий пользователя на страницу регистрации:

# GET /resource/sign_up
def new
    @plan = AffiliatePlan.find_by(nickname: params.permit(:plan)[:plan].downcase)
    super
end

На этой странице, если нажать кнопку «Назад» в браузере, пользователь вернется на страницу, на которой он был до того, как оказался на plans.html.erb.

Может ли это быть связано с redirect_to?


РЕДАКТИРОВАТЬ:

Вот журналы:

Started GET "/" for 127.0.0.1 at 2020-02-25 19:06:02 -0500
Processing by Affiliates::RegistrationsController#plans as HTML
  Rendering affiliates/registrations/plans.html.erb within layouts/application
  Rendered affiliates/registrations/plans.html.erb within layouts/application (5.2ms)
  Rendered layouts/_google_analytics.html.erb (0.5ms)
[Webpacker] Everything's up-to-date. Nothing to do
  Rendered layouts/_header.html.erb (1.2ms)
  Rendered layouts/_footer.html.erb (0.7ms)
Completed 200 OK in 195ms (Views: 194.2ms | ActiveRecord: 0.0ms)


Started POST "/partner/select_plan" for 127.0.0.1 at 2020-02-25 19:06:13 -0500
Processing by Affiliates::RegistrationsController#select_plan as JS
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Ck8HGRryriXleQrUjCSKjTrIRLIw273EdSu4WZnFn3kAL1mMmk7jqR1tZgnPniHsMzHFMl81vPBRuvA0/W4uSw==", "button"=>"Local"}
Unpermitted parameters: :utf8, :authenticity_token
Redirected to http://localhost:3000/partners/sign_up?plan=Local
Completed 200 OK in 1ms (ActiveRecord: 0.0ms)


Started GET "/partners/sign_up?plan=Local" for 127.0.0.1 at 2020-02-25 19:06:13 -0500
Processing by Affiliates::RegistrationsController#new as HTML
  Parameters: {"plan"=>"Local"}
  AffiliatePlan Load (1.2ms)  SELECT  "affiliate_plans".* FROM "affiliate_plans" WHERE "affiliate_plans"."nickname" = $1 LIMIT $2  [["nickname", "local"], ["LIMIT", 1]]
  ↳ app/controllers/affiliates/registrations_controller.rb:11
  Rendering affiliates/registrations/new.html.erb within layouts/application
  Rendered affiliates/registrations/new.html.erb within layouts/application (4.6ms)
  Rendered layouts/_google_analytics.html.erb (1.1ms)
[Webpacker] Everything's up-to-date. Nothing to do
  Rendered layouts/_header.html.erb (1.2ms)
  Rendered layouts/_footer.html.erb (0.7ms)
Completed 200 OK in 191ms (Views: 187.6ms | ActiveRecord: 1.2ms)

  • вы перенаправляетесь на страницу plan.html.erb при обратном щелчке браузера. это ваша проблема или что-то еще? 25.02.2020
  • @GaneshkumarK Нет, проблема в том, что они не возвращаются в plan.html.erb. Они перенаправляются на любую страницу, на которой они находились до того, как попали на plan.html.erb. 25.02.2020
  • Есть ли у вас какие-либо обратные вызовы перед вашим действием plans#index, которые могут вызвать переход на любую страницу, которая была до этого? 25.02.2020
  • @VincentRolea Действие plans находится в Affiliates::RegistrationsController. В настоящее время он установлен как корень root to: "affiliates/registrations#plans" (в рамках партнерской программы разработки). Я не могу придумать настройки обратных вызовов, которые должны вызывать перенаправление. Он даже перенаправит с сайта, если они ранее были на внешней странице. 25.02.2020
  • Не могли бы вы поделиться своими журналами от выбора плана до нажатия кнопки «Назад»? 25.02.2020
  • Что ваш контроллер расширяет от того, что вы должны вызывать super в новом действии? 26.02.2020
  • @VincentRolea Просто добавил их к вопросу. Спасибо за предложение, похоже, Devise может перенаправить. Глядя дальше в это 26.02.2020
  • @bwalshy Это Devise RegistrationsController 26.02.2020

Ответы:


1

У меня есть подозрение, что это может быть связано с повторной отправкой формы: формы и кнопка «Назад» временами имеют тенденцию быть немного шаткими.

Однако вместо того, чтобы углубляться в это, позвольте мне указать вам другое направление. Я делаю это, потому что для меня это выглядит как классический случай, когда кто-то пытается найти решение неправильной проблемы. Я говорю это, потому что, основываясь на предоставленном вами коде и фрагментах журнала, вы пытаетесь передать параметр (в вашем случае название плана) с помощью нескольких действий, которые, если я прав, просто ненужно.

Вот что я бы сделал вместо этого:

<% @plans.each do |plan| %>
  <%=
    link_to 'Select Plan',
    new_affiliate_registration_path(plan: plan.downcase),
    class: 'some-button-class
  %>
<% end %>

Таким образом, вам не нужно возиться с вашими контроллерами. Кроме того, поскольку POST-запроса нет, у вас не будет проблем с (повторным) заполнением формы и тому подобными вещами.

27.02.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..