Частичная визуализация в контроллере rails, вызываемом с помощью ajax

#ruby-on-rails #render

#ruby-on-rails #рендеринг

Вопрос:

У меня есть приложение rails, в котором у меня есть часть представлений как частичные, и я пересчитал пару представлений как SPA. У меня проблема с одной функциональностью. В одном месте я выполнял частичный рендеринг без вызова контроллера следующим образом:

 def create
      school_service.update_preview
      @user = get_user
      @result = prepare_result

      render 'school/result/show', locals: {
        pupil:       @user,
        result:      @result
      }
end
  

Я вызывал этот метод с помощью формы. Теперь я вызываю это из JS с помощью AJAX. Возможно ли отобразить это представление таким же образом? Я бы не хотел переписывать ‘school / result / show’ в SPA. Спасибо за все ответы.

Комментарии:

1. Что такое SPA, если вы не возражаете, если я спрошу?

2. Вам не хватает a partial: .

3. SPA — одностраничное приложение

4. @user2239655 вы просто хотите отобразить этот частичный рендеринг из своего ajax?

5. Я не знаю, возможно ли это. Мне нужно установить переменные pupil и result, и я могу сделать это только на стороне сервера.

Ответ №1:

В вашем вопросе говорится I was calling this method using form. Now I call this using AJAX. Is it possible to render that view in the same way?

Поскольку вы используете AJAX, я предполагаю, что у вас будет что-то удаленное: true в вашей форме что-то вроде:

 <%= form_for(@user, remote: true) do |f| %>
  # your fields
<% end %>
  

Это приведет вас к действию create в вашем контроллере, и вы можете иметь блок response_to в вашем контроллере для обработки вашего формата js

 def create
  @user = get_user
  @result = prepare_result
  respond_to do |format|
    format.js {}
  end
end
  

Это позволит вам иметь файл create.js.erb в ваших представлениях, где вы можете написать свой js для рендеринга вашего частичного

 $(".your_parent_element_class").html("<%=j render partial: "school/result/show",locals:{pupil: @user, result: @result} %>")
  

Для получения более подробной информации проверьте working with javascript in rails