【发布时间】:2016-08-29 15:25:54
【问题描述】:
我正在为我的 rails 控制器中的实例变量提供的 html 页面构建一个高图。我收到的问题是我在控制器中设置的 rails 实例变量没有被传递给我相应的 js.erb 文件。我还没有确定原因是什么。有人可以帮助查明问题可能是什么吗?下面是代码:
控制器
class VulnerabilitiesController < ApplicationController
helper ProjectsHelper
before_action :set_project_or_fail
before_action :set_best_project_security_set
before_action :set_releases
before_action :set_vulnerabilities
def index
@release_versions = @releases.map { |r| r.version }
end
private
def set_project_or_fail
project_id = params[:project_id] || params[:id]
@project = Project.by_vanity_url_or_id(project_id).take
raise ParamRecordNotFound unless @project
end
def set_best_project_security_set
@best_project_security_set = @project.best_project_security_set
end
def set_releases
@releases = @best_project_security_set.releases.limit(10)
end
def set_vulnerabilities
@vulnerabilities = @best_project_security_set.vulnerabilities
end
end
这是html文件:
漏洞/index.html.haml
<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
这是漏洞.js.erb 文件的一部分:
$(function () {
$('#container').highcharts({
chart: {
type: 'column'
},
title: {
text: 'Vulnerabilities per Version',
align: 'left',
style: {
color: '#336699',
fontSize: 16
}
},
legend: {
align: 'left',
itemWidth: 127
},
xAxis: {
categories: <%- @release_versions %>
},
...........code.........
@release_versions 每次都返回 nil。我试过了
categories: <%- @release_versions %>
categories: [<%- @release_versions %>]
categories: [<%= @release_versions %>]
categories: <%= @release_versions %>
这些变化都没有奏效。可能是什么问题?
【问题讨论】:
-
您的 JS 响应模板的名称是否与呈现它的操作匹配?在您的示例中,您有
vulnerabilities.js.erb但如果正在调用index操作,则响应模板的名称应为index.js.erb否? -
感谢卡洛斯·拉米雷斯的回复。 js.erb 文件名应该无关紧要。我在
require tree下的application.js中有所需的vulnerabilities.js.erb文件,因此该文件应该加载到应用程序中。 -
Rails 控制器不会将实例变量数据传递给 JS 文件,除非它们是由控制器本身专门呈现的。因此,如果您只是在资产管道中包含
.js.erb文件,则不会定义这些变量。
标签: javascript ruby-on-rails ruby highcharts