首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionView::MissingTemplate:缺少js.erb文件模板

ActionView::MissingTemplate:缺少js.erb文件模板
EN

Stack Overflow用户
提问于 2016-09-06 18:06:21
回答 2查看 1.9K关注 0票数 1

我在运行一个控制器测试时遇到了问题。我得到的错误是缺少一个模板:

代码语言:javascript
复制
ActionView::MissingTemplate Missing template vulnerabilities/vulnerabilities_per_version, application/vulnerabilities_per_version 
with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :arb, :haml, :jbuilder]}

这是我的routes.rb文件:

代码语言:javascript
复制
......code....
get 'security' => 'vulnerabilities#vulnerabilities_per_version', as: :vulnerabilities, defaults: { format: 'js' }
......code.....

正如您所看到的,我显然是在制作只接受js的格式,并且调用确实是作为日志上的JS进行的。

这里是控制器:

代码语言:javascript
复制
class VulnerabilitiesController < ApplicationController
  def vulnerabilities_per_version
    @release_versions = @releases.map(&:version).to_json
  end
end

以下是我的观点:

代码语言:javascript
复制
app/views/vulnerabilities/vulnerabilities_per_version.js.erb

$(function () {
 $('#vulnerabilities').highcharts({
     chart: {
         type: 'column',
         events: {
         load: function() {
             this.renderer.image('http://i64.tinypic.com/25irqt5.png', 60, 30, 280, 30)
                 .add();
             }
         }
     },
     credits: {
         enabled: false
     },
     title: {

     ....code....

以下是我的控制器测试:

代码语言:javascript
复制
require 'test_helper'

class VulnerabilitiesControllerTest < ActionController::TestCase
  it 'should retrieve the 10 most recent releases for a project' do
    @project = create(:project)
    @project.project_security_sets << create(:project_security_set)
    @project.project_security_sets[0].releases << create_list(:release, 10)
    @project.project_security_sets[0].releases.each do |r|
      r.vulnerabilities << create(:vulnerability)
    end
    @project.update!(best_project_security_set_id: @project.project_security_sets[0].id, editor_account: create(:admin))
    get :vulnerabilities_per_version, id: @project.id, xhr: true
    assert_response :success
    assert_equal 10, @project.best_project_security_set.releases.count
    assert_equal @project.best_project_security_set.releases.order(released_on: :asc), assigns(:releases)
  end
end

我已经有一段时间没有处理呈现javascript文件的工作了,但是我应该已经准备好了必要的组件。

请求以js的形式传入,响应被接受,我可以从js.erb文件中看到我的高图表呈现。我尝试过一个respond_to块,但由于错误从200变成了404,这似乎没有给我带来任何进展。我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-06 20:17:20

您需要在控制器测试中指定请求格式:

get :vulnerabilities_per_version, id: @project.id, xhr: true, format: :js

票数 0
EN

Stack Overflow用户

发布于 2016-09-06 18:36:53

您肯定必须向控制器指定它必须通过js.erb文件进行响应。正如您在错误消息中所看到的,Rails正在寻找一个HTML模板,却找不到一个(他正在寻找vulnerabilities_per_version.html.erb)。

因此,在控制器中的vulnerabilities_per_version方法中,在@release_versions = @releases.map(&:version).to_json行之后添加:

代码语言:javascript
复制
respond_to do |format|
  format.js  # <-- will render `app/views/vulnerabilities/vulnerabilities_per_version.js.erb`
end

如果成功了就告诉我。万事如意。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39355251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档