Страница пропуска кнопки Назад в Ruby приложении Rails - PullRequest
1 голос
/ 22 февраля 2020

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

На странице 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)

1 Ответ

2 голосов
/ 28 февраля 2020

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

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

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

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

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

...