Несколько последовательных вызовов AJAX в приложении rails - PullRequest
0 голосов
/ 29 августа 2018

В настоящее время у меня есть приложение, в котором посетители регистрируются через форму AJAX с помощью устройства devise.

Я хочу улучшить эту форму и сделать следующее:

  1. Когда пользователь находится на странице, появляется модал с выбором подписки.
  2. Как только он отправит эту форму, появится форма регистрации.
  3. После того, как он заполнил форму и отправил ее, появляется форма оплаты (+ резюме выбранной подписки).
  4. Как только пользователь заплатил, он перенаправляется.

Так что я думал о трех последовательных AJAX-вызовах, чтобы сделать это, но я застрял.

Вот что я сделал для первой части (чтобы перейти от формы выбора подписки к форме регистрации):

питание / index.html.erb:

<% if current_user == nil %>
  <%= render partial: 'subscriptions/subscription_selection' %>
<% end %>

subscription / _subscription_selection.html.erb:

<!-- some blabla -->
<%= form_tag save_subscription_choice_path, method: "get", remote: true do %>
          <%= hidden_field_tag 'chosen_subscription', '22'%>
          <%= submit_tag 'CHOISIR CETTE FORMULE', class: 'btn btn-primary' %>
        <% end %>

subscription_controller.rb:

  def save_subscription_choice
    @subscription_choice_id = params['chosen_subscription']
    respond_to do |format|
      format.js
    end
  end

config / rout.rb:

get "subscriptions/save_subscription_choice", to: "subscriptions#save_subscription_choice", as: "save_subscription_choice"

subscription / save_subscription_choice.js.erb:

$(".subscription-selection-modal").html("<%= escape_javascript(render partial: 'meals/signup_modal') %>");

console.log('save_subscription_choice.js.erb succesfully loaded');

и журналы ошибок:

Started GET "/subscriptions/save_subscription_choice?utf8=%E2%9C%93&chosen_subscription=12&commit=CHOISIR+CETTE+FORMULE" for 127.0.0.1 at 2018-08-29 15:48:04 +0200
Processing by SubscriptionsController#show as JS
  Parameters: {"utf8"=>"✓", "chosen_subscription"=>"12", "commit"=>"CHOISIR CETTE FORMULE", "id"=>"save_subscription_choice"}
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)


Started GET "/users/sign_in.js" for 127.0.0.1 at 2018-08-29 15:48:04 +0200
Processing by Devise::SessionsController#new as JS
Completed 406 Not Acceptable in 1ms (ActiveRecord: 0.0ms)



ActionController::UnknownFormat (ActionController::UnknownFormat):

Понятия не имею, почему приложение вызывает /users/sign_in.js, его даже нет в моем собственном коде (вероятно, это файл разработки, я думаю?)

Есть идеи о том, как я мог бы сделать эту работу?

1 Ответ

0 голосов
/ 29 августа 2018

ОК, так что это на самом деле проблема с маршрутизатором.

в моем config/routes.rb сначала были упомянуты маршруты подписок # index и подписки # show:

  resources :subscriptions, only: [:index, :show]
    get "subscriptions/save_subscription_choice", to: "subscriptions#save_subscription_choice", as: "save_subscription_choice"

Из-за чего мое приложение фактически вызывало метод show.

Я просто переключил эти две линии, и теперь он работает отлично.

как указал @arieljuod, Вторая проблема была: разработать авторизацию.

Поскольку в моем приложении для аутентификации пользователя before_action по умолчанию установлено значение true, мне пришлось добавить следующую строку в моем контроллере подписки: skip_before_action :authenticate_user!, raise: false, only: [:save_subscription_choice]

...