私は、レールコントローラからインスタンス変数によって提供されるhtmlページのハイチャートを作成しています。私が受け取っている問題は、コントローラに設定されたレールインスタンス変数が、対応するjs.erbファイルに渡されていないことです。私は原因が何であるかをまだ判断していません。誰かが問題の原因を突き止めるのに役立つでしょうか?コントローラが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>
、ここvulnerabilities.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'でなければなりません。 –
レスポンスありがとうCarlos Ramirez。 js.erbファイル名は重要ではありません。 'requires tree'の' application.js'に 'vulnerabilities.js.erb'ファイルが必要です。したがって、ファイルはアプリケーションにロードされるべきです。 –
Railsコントローラは、コントローラ自身によってレンダリングされない限り、インスタンス変数データをJSファイルに渡しません。したがって、アセットパイプラインに '.js.erb'ファイルだけを含めると、これらの変数は定義されません。 –