Задать вопрос
@kukushka154

Как запустить javascript код в ruby on rails?

Есть файл input.html.erb, через него я заполняю форму для ввода натурального числа n и ввожу n чисел, при нажатии на кнопку должен запускаться JS скрипт, который обрабатывает этот запрос с помощью метода Get, но не запускается

Это работало на 4 версии Ruby on Rails, когда коды на javascript находились по маршруту: "app/assets/javascripts", теперь эти коды находятся по маршруту "app/javascript/packs", думаю проблема в этом.

Сама программа точно видит этот файл, так как при запуске сервера видно (скрин ниже), что файл обрабатывается, пробовал добавлять в input.html.erv код: <%= javascript_pack_tag 'sequence', 'data-turbolinks-track': 'reload' %>

Код контроллера:
# app/controllers/sequence_controller.rb
 
class SequenceController < ApplicationController
  before_action :authorize
 
  def input
    begin
      a = params[:value].to_s
      b = params[:numbers].to_s
      c = a + " " + b
    rescue
      p 'SequenceController: Input data error'
      p c
    end
    # a = 0 if a < 0
    respond_to do |format|
      format.html
      format.json do
        render json: { solution: Answer.where(query: c).first_or_create.get_solution}
      end
    end
    # p Answer.last
    # p ActiveSupport::JSON.decode(Answer.last.solution)
    # p JSON.parse(Answer.all.to_json).to_xml
  end
end

Код input.html.erb:
<!-- app/views/sequence/input.html.erb -->
<form id="form" action="javascript:">
<h1>Последовательность</h1>
  <label>Введите натуральное число:</label>
  <input type="number" pattern="^[\d]+$" name="value" /> <br> <br>
  <label>Введите числа через пробел:</label>
  <input type="text" name="numbers"/> <br> <br>
  <input type="submit" class = "btn btn-primary" value="Найти последовательность"/>
</form>
<table id="table" style="display:none" class="table table-hover">
  <tr>
    <th>Н</th>
    <th>Исходная последовательность</th>
    <th>Подходящие последовательности</th>
    <th>Длиннейшая последовательность</th>
    <th>Кол-во последовательностей</th>
  </tr>
</table>
<div id="error" style="display:none" class = "alert alert-danger">
  <strong>Ошибка!</strong> Timeout error
</div>
<script>
  <%= javascript_pack_tag 'sequence', 'data-turbolinks-track': 'reload' %>
</script>

Код sequence.js:
(function(){
  'use strict';
  $(window).one('load', function() {
    let $Form = $('#form');
    let $Table = $('#table');
    let $Error = $('#error');
 
    $Form.on('submit', function() {
      let $HTML = '';
      $Table.find('tr:not(:first)').remove();
      $.get('/sequence/input.json', $Form.serialize(), function($JSON) {
        if($JSON['solution'].length === 0) {
          $Table.hide();
          $Error.show();
        }
        else {
          $.each($JSON['solution'], function($NULL, $Value) {
            $HTML += '<tr>\
                        <td>' + $Value[0] + '</td>\
                        <td>' + $Value[1] + '</td>\
                        <td>' + $Value[2] + '</td>\
                        <td>' + $Value[3] + '</td>\
                        <td>' + $Value[4] + '</td>\
                      </tr>';
          });
          $Table.show().append($HTML);
          $Error.hide();
        }
      });
    });
  });
})();


Сама страничка и док-во отсутствия каких-либо действий при нажатии на кнопку
6151bf51539a9861025951.png

Что должно было произойти
6151bf6ac0727823371635.png
  • Вопрос задан
  • 216 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы