如何在Rails ERB标记内调用javascript变量

时间:2013-03-14 08:42:57

标签: javascript ruby-on-rails json erb

我通过使用Sunspot solr作为JSON从我的Rails操作获取Job搜索结果,并通过解析JSON数据和我在客户端创建结果视图。使用Javascript创建HTML元素。但是从响应JSON中我们无法获得作业关联对象,因此通过使用响应JSON中的company_id字段,我试图通过嵌入式ruby标记从javascript本身访问公司。

  function submitForm() {
   var valuesToSubmit = $('#FRM_JOB_SEARCH').serialize();
    jQuery.ajax({
    type: "POST",
    url: $('#FRM_JOB_SEARCH').attr('action'),
    data :valuesToSubmit,
    success : function(json){
      var data = JSON.parse(json);
          $.each(data, function(key, val) {
                          create_blocks(key , val);
        });
    } ,
    dataype : 'json' ,
    remote : true });

    }

  function create_blocks(key , value) {
       var feeds = eval(value)
          var company_id = feeds["company_id"];
          var company_name = '<%= Company.find_by_id('company_id').name %>';
          console.log(company_name);
   }

但是这个变量在ERB标签内是不可访问的。如何在RAILS erb标签内访问javascript变量。

2 个答案:

答案 0 :(得分:0)

你不能这样做,因为javascript在客户端,而erb在服务器上滑动。

通常,如果要将某个变量传递给erb,可以在控制器中以特定操作(如果愿意)获取该变量,并将该数据传递给erb。

你可以看看铁路广播here如何做到这一点。

答案 1 :(得分:0)

正如Aleks所说,你不能这样做,因为你在回调中调用的函数中使用ruby代码。实现您想要做的最简单的方法是在服务器获取的json数据中传递公司名称。

如果您使用to_json呈现json响应,请尝试以下

 render json: @records.to_json(methods: [:company_name])

然后在模型中添加company_name方法

 def company_name
   company.name
 end