create.js.erb вызывается только один раз после отправки формы - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть simple_form_for в моем проекте. Моя цель - предупредить людей, когда их электронная почта уже есть в базе данных, благодаря предупреждению и ajax, чтобы перезагрузить форму в случае ошибки. Когда я отправляю свою форму в первый раз, я получаю хороший ответ от create.js.erb. Но если я отправляю форму второй раз, не перезагружая страницу с помощью браузера, учитывается код метода создания контроллера, но не код create.js.erb. Например, если я добавлю предупреждение в файл create.js.erb, оно не появится во второй раз, когда я отправляю форму, нажав кнопку еще раз. Можете ли вы помочь мне понять, почему?

pages_controller.rb

 def create
    @email = waiting_list_params[:email]
    @waiting_user = WaitingList.new(waiting_list_params)
    respond_to do |format|
    if @waiting_user.save
        UserMailer.welcome(@email).deliver_now
        format.html { redirect_to concours_path }
        format.js
      else
        format.html { render 'pages/concours' }
        format.js { flash[:error] = @waiting_user.errors.full_messages[0] }
      end
    end
  end

create.js.erb

   function refreshForm(innerHTML) {
  const newForm = document.getElementById("concours-form");
  newForm.innerHTML = innerHTML;
}


<% if @waiting_user.errors.any? %>
  refreshForm('<%= j render "pages/concours_form" %>');
  confPopup.style.display = "none";
<% else %>
  confPopup.style.display = "flex";
<% end %>

_form.html.erb

<%= simple_form_for @waiting_user, {id: 'concours-form', url: concours_path, remote: true} do |f| %>
  <%= f.error_notification %>
  <%= f.text_field :email,
      class: "landing-form-input",
      autocomplete: "off",
      required: true,
      pattern: '[^@]+@[^@]+\.[a-zA-Z]{2,6}',
      placeholder: "Renseignez ton email ici"
    %>
  <i class="fa fa-envelope"></i>
  <%= f.hidden_field :concours_city,
      value:'',
      id: 'c-choosen-city'
    %>
  <%= f.hidden_field :source,
      value: params[:source]
    %>
  <%= f.button :submit,
      class: "landing-form-button",
      value: "Je tente ma chance !"
    %>
<% end %>

rout.rb

get 'concours', to: 'pages#concours'
post 'concours', to: 'pages#create'
...