Как использовать js .erb view в Rails 6 - PullRequest
1 голос
/ 28 марта 2020

Есть ли возможность использовать js.erb представления в приложении Rails 6? Я получаю ошибку

MyController#my_action is missing a template for this request format and variant.

request.formats: ["text/html"]
request.variant: []

для действий, использующих js.erb представлений после миграции на рельсы 6.

В своем действии я просто назначаю значение переменной экземпляра:

  def next_question
    @lesson = lesson
  end

В маршрутах у меня есть

  put ':package_id/lessons/next_question', to: 'lessons#next_question', as: 'next_question'

И есть форма для отправки этого запроса

 = form_tag next_question_path(@package), method: :put, remote: true 

Если я создаю (для теста) html.slim файл, все работает хорошо. Если я добавлю format.js к контроллеру, я получу ActionController::UnknownFormat

Ответы [ 2 ]

1 голос
/ 28 марта 2020

В методе контроллера rails вам нужно определить формат запросов, на которые метод может ответить, добавив в метод блок response_to. Если блок response_to отсутствует, то по умолчанию метод отвечает только на html запросов. Для js или любого другого запроса вам нужно добавить блок response_to.

def next_question
  @lesson = lesson

  respond_to do |format|
    format.js
  end
end

. Это скажет методу, что ему нужно искать файл js .erb с именем next_question. js. эээ, вы также можете указать имя файла, например, format.js { render partial: 'filename' }, а затем метод будет искать и отвечать filename.js.erb file.

1 голос
/ 28 марта 2020

Создайте файл вида next_question.js.erb, затем сделайте это

def next_question
  @lesson = lesson

  respond_to do |format|
    format.js
  end
end

Также включите ujs в application.js файле, добавьте эту строку

require("@rails/ujs").start()

Дайте ему попробовать!

...