Как вернуть значение из метода контроллера Rails во время вызова ajax? - PullRequest
0 голосов
/ 12 февраля 2020
<%= form_for(@mymodel, remote: true, html: { id: 'match_form' }) do |f| %>
        <!-- I need to check if @mymodel.match_id matches the value generated by a controller function -->
   <%= f.submit 'Save', class: 'btn btn-primary', id: 'match_submit', style: "width:38px;padding:0px" %> 
   <%= button_tag 'Cancel', class: 'btn btn-secondary', id: 'match_cancel', style: "width:52px;padding:0px" %>
<% end%>


<script type='text/javascript'>
    $(function() {
      $(document).on("click", "#match_submit", function(event){
        $.ajax('my_controller_method', {
          type: 'GET',
          dataType: 'script',
          data: {
            mid: $("#").val(),  // how do I pass @mymodel.match_id here?
          },
          error: function(jqXHR, textStatus, errorThrown) {
          return console.log("AJAX Error: " + textStatus);
        }
      });      
    });
  </script>

У меня есть приведенный выше код JavaScrpt, который делает ajax вызов метода контроллера Rails.

Я хотел бы проверить, соответствует ли значение, переданное в этом вызове ajax, определенному значению , Если нет, я хотел бы отобразить модальное сообщение об ошибке только с кнопкой Ok.

Я могу придумать 2 способа добиться этого:

  1. Я могу верните правильное значение из метода контроллера (это требует некоторых вычислений, выполнив запрос SQL. Вот почему я делаю это в методе контроллера), проверьте равенство в JavaScript и выведите предупреждение JavaScipt, если нет совпадения .

    В: Для этого я хотел бы знать, как я могу вернуть номер из функции контроллера (вызываемой во время вызова ajax) обратно в JavaScript

  2. Я мог бы проверить соответствие внутри самого контроллера, а затем визуализировать модальный bootstrap в самой функции контроллера

    Q: Для этого я хотел бы знать, как визуализировать модальный bootstrap (который показывает текстовое сообщение и только кнопку Ok внутри функции моего контроллера.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020
def my_controller_method
 # assign your value here like,
 @message = 'Error occured!'
end

сделать файл js как,

my_controller_method. js .erb

в этом файле js сделать как,

$("#mymodaldiv").html("<%= j render(partial: 'my_partial_page',locals: {msg: @message}) %>");

Здесь mymodaldiv - это идентификатор div, который вы должны поместить в свой файл, откуда AJAX происходит вызов, как

<div id='mymodaldiv'></div>

, а my_partial_page - это имя вашего частично, где вы должны использовать переменную msg для создания вашей страницы. as,

_my_partial_page. html .erb

и код в файле _my_partial_page. html .erb выглядит как

<h1><%= msg %></h1>
0 голосов
/ 12 февраля 2020

Если я правильно понял ваш вопрос. Я бы предпочел второй подход (поскольку нет смысла заставлять пользователя нажимать кнопку, если вы можете предоставить информацию без него).

<% if your_match_function or value %>
   <div> Ok </div>
<% else %>
   <script type="text/javascript"> 
      $('#myModal').modal('show')
   </script>
<% end %>

Однако для первого подхода вы можете использовать тоже самое но обработать этот фрагмент в результате запроса ajax. И не забудьте добавить HTML для модального всплывающего окна. https://getbootstrap.com/docs/4.0/components/modal/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...