Передача значения JavaScript в Ruby в ERB - PullRequest
1 голос
/ 18 июня 2019

Я хочу передать значение JavaScript в качестве параметра в функцию Ruby в ERB.

Код для index.html.erb

function ABC(){
  variable = document.getElementById('textfield').value;
}

function XYZ(){
  <%= ruby_function(variable) %>
}

Мне нужна помощь, чтобы добиться этого.

Ответы [ 3 ]

1 голос
/ 18 июня 2019

Надлежащим способом достижения этого является использование ajax в вашем скрипте.

Например, вы можете использовать скрипт кофе и сделать что-то вроде этого.

ABC = ->
  variable = document.getElementById('textfield').value
  res = $.ajax(
    url: '#{method_controller_path}'
    method: 'GET'
    data:
      param: variable
    dataType: 'json'
    success: (res) ->
      res
  )

В конце вы будетеиметь объект res для работы.

Если вы не используете кофе или внешние файлы сценариев.Вы можете сделать это, используя JavaScript в файле index.html.erb.

Вот пример для этого.

const ABC = function() {
  let res;
  const variable = document.getElementById('textfield').value;
  return res = $.ajax({
    url: '#{method_controller_path}',
    method: 'GET',
    data: {
      param: variable
    },
    dataType: 'json',
    success(res) {
      return res;
    }
  });
};

Надеюсь, это поможет вам.:)

0 голосов
/ 18 июня 2019

Вы можете использовать ERB (встроенный рубин), если вы напишите его внутри тега скрипта в html, а файл является файлом ERB. Пример кода ruby ​​в этом javascript является мягким, но иллюстрирует, как вы можете это сделать.

<body>
  <%= render 'shared/overlay' %>
  <%= render 'shared/notice_alert_modals' %>
  <header>
    <%= image_tag header_logo, class: 'logo' %>
  </header>
  <div class="content">
    <%= yield %>
  </div>
  <script>
    $(document).ready(function(){
      // append some tag with erb ruby
      var html = "<h2>ABC<%= %w[D E F].split(' ').join %></h2>"
      $('body').append(html)
    })
  </script>
</body>
0 голосов
/ 18 июня 2019

Это работает без Jquery.

контроллер ruby:

class MyServiceController
  def variable
    @var = ruby_function(params[:js_var])
    responde_to do |format|
      format.js { render json: @var }
    end
  end
end 

js функция:

  function XYZ(){
    var variable = document.getElementById('textfield').value;
    var xhr = new XMLHttpRequest();
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.open('POST', 'myservice/variable');
    xhr.onload = function() {
      var rubyResponse = xhr.responseText;
    };
    xhr.send(encodeURI('js_var=' + variable));
  }
...