Подтвердить что ты не робот

Форма представлена ​​дважды, из-за: remote => true

Моя форма отправляется дважды, после того, как дважды проверена, это было вызвано ': remote = > true'. Я удалил его, мой проект работает хорошо. Кто может мне показать почему? И как использовать ': remote = > true'?

Мой код ruby:

<%= form_tag(admin_product_group_product_scopes_path(@product_group), :remote => true, :id => 'new_product_group_form') do %>
    <%
    options =
    grouped_options_for_select(
    Scopes::Product::SCOPES.map do |group_name, scopes|
      [
        t(:name, :scope => [:product_scopes, :groups, group_name]),
        scopes.keys.map do |scope_name|
          [ t(:name, :scope => [:product_scopes, :scopes, scope_name]), scope_name]
        end
      ]
    end
    )
    %>
    <p>
      <label for="product_scope_name"><%= t('add_scope') %></label>
      <%= select_tag("product_scope[name]", options) %>
      <input type="submit" value="<%= t('add') %>" />
    </p>
  <% end %>

Последний HTML-код в браузере.

 <form accept-charset="UTF-8" action="/admin/product_groups/17/product_scopes" data-remote="true" id="new_product_group_form" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" value="GocX/l4ZNgF/feKtzC8FuohebM2k5MuIHtdeGp2Oi0A="></div>
    <p>
      <label for="product_scope_name">Add a scope</label>
      <select id="product_scope_name" name="product_scope[name]"><optgroup label="Taxon"><option value="taxons_name_eq">In Taxon(without descendants)</option>
<option value="in_taxons">In taxons and all their descendants</option></optgroup><optgroup label="Text search"><option value="in_name">Product name have following</option>
<option value="in_name_or_keywords">Product name or meta keywords have following</option>
<option value="in_name_or_description">Product name or description have following</option>
<option value="with_ids">Products with IDs</option></optgroup><optgroup label="Values"><option value="with">With value</option>
<option value="with_property">With property</option>
<option value="with_property_value">With property value</option>
<option value="with_option">With option</option>
<option value="with_option_value">With option and value</option></optgroup><optgroup label="Price"><option value="price_between">Price between</option>
<option value="master_price_lte">Master price lesser or equal to</option>
<option value="master_price_gte">Master price greater or equal to</option></optgroup></select>
      <input type="submit" value="Add">
    </p>
</form>
4b9b3361

Ответ 1

Если люди спотыкаются на этот вопрос, как я:

У меня была такая же проблема, и ответ sannankhalid не исправил ее, но удаление локально прекомпилированного application.js в каталоге public/assets - ujs включается дважды, поэтому он запускается дважды. Через fooobar.com/questions/399053/...

Ответ 2

В Rails 5, rails-ujs заменяется jquery_ujs. События будут запускаться дважды, если они необходимы.

// app/assets/javascripts/application.js
//= require jquery_ujs <-- delete this
//= require rails-ujs

Ответ 3

Я предполагаю, что вы используете jquery. Обычно это происходит, когда есть неполный вызов или есть какая-то ошибка, и вы не обновляете страницу. Попробуйте что-то вроде этого:

<script type="text/javascript">
$('#new_product_group_form').submit(function() {
                    $(this).unbind('submit').submit();
       });
</script>

Ответ 4

Кажется, ответ Райана Мюллера правильный. Но удаление application.js не является правильным способом для моего представления. Я сделал это, открыв инструмент разработчика в хроме и щелкнув по сетевой части. Теперь, когда я нажимаю кнопку отправки, он показывает мне, кто делает запрос. Поэтому я удалил этот JS и попробовал его снова, и он работает. Так что, по мнению Райана Мюллера, правильно, что его проблема JS включается дважды. Но убедитесь, что вы также поддерживаете зависимость JS.

enter image description here

Ответ 5

Попробуйте ctrl-c на сервере, чтобы остановить его. Затем rm -r public/assets/, чтобы избавиться от каталога ресурсов (и дубликата application.js). Перезагрузите сервер из одного окна терминала, и он может работать как ожидалось.

Ответ 6

Хотел добавить еще одну возможную причину этого. Для меня он использовал Mixpanel api. В частности https://mixpanel.com/docs/integration-libraries/javascript-full-api#track_forms

Кажется, что использование :remote=> true в сочетании с mixpanel.track_forms приведет к отправке формы через обычный html после желаемого json.

Это, вероятно, редко, но мне потребовалось некоторое время, чтобы отследить.

Ответ 7

Вот эквивалент HAML для sannankhalid.

:javascript
  = f.submit(function() {
    $(this).unbind('submit').submit();
  });

У меня была проблема с двойным POST с Rails 4 и Bootstrap 3 (w/jQuery), отправляющая обновления форм из модалов.

Ответ 8

в шаблоне вашего приложения (или там, где вы храните тег приложения% lt;% = javascript_include_tag) или эквивалент haml, добавьте флаг "data-turbolinks-track" = > true, так что теперь тег будет выглядеть это: <% = javascript_include_tag "приложение", "data-turbolinks-track" = > true% > .

Ответ 9

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

<!-- Google Tag Manager -->
 <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-PQZJ2T"
 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
 <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
 '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
 })(window,document,'script','dataLayer','GTM-PQZJ2T');</script>