如何在 Rails 6 中使用 js.erb 视图

How to use js.erb views in Rails 6

是否可以在 Rails 6 应用程序中使用 js.erb 视图?我得到

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

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

迁移到 rails 6 后使用 js.erb 视图的操作出错。

在我的操作中,我只是为实例变量赋值:

  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

创建视图文件next_question.js.erb,然后执行此操作

def next_question
  @lesson = lesson

  respond_to do |format|
    format.js
  end
end

此外,在 application.js 文件中启用 ujs,添加此行

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

试试吧!

在 rails 控制器方法中,您需要通过在方法中添加 respond_to 块来定义该方法可以响应的请求的格式。如果不存在 respond_to 块,则默认情况下该方法仅响应 html 请求。对于 js 或任何其他请求,您需要添加一个 respond_to 块。

def next_question
  @lesson = lesson

  respond_to do |format|
    format.js
  end
end

这将告诉方法它需要查找名为 next_question.js.erb 的 js.erb 文件,您也可以像这样指定文件名 format.js { render partial: 'filename' }然后该方法将查找并响应 filename.js.erb 文件。