繁体   English   中英

为什么我的控制器不传递js.erb文件的实例变量?

[英]Why does my Controller not pass instance variables for js.erb file?

我正在为来自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文件:

vulnerabilities / 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每次@release_versions返回nil。 我努力了

categories: <%- @release_versions %> categories: [<%- @release_versions %>] categories: [<%= @release_versions %>] categories: <%= @release_versions %>

这些变化都没有奏效。 可能是什么问题呢?

要利用Rails控制器填充JS模板所需的数据,您需要直接从JS(或视图模板)中调用控制器动作。

// in a view template or UJS call
<script>    
    // make an AJAX request to the '/vulnerabilities' URL
    $.ajax(...);
</script>

// VulnerabilitiesController#index action is called; index.js.erb template is rendered

// in vulnerabilities/index.js.erb
// here the instance variables from the controller action are defined
$('#container').highcharts({
    // ...
    xAxis: {
        categories: <%- @release_versions %>
    },
    // ...
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM