【问题标题】:How to call a javascript variable inside Rails ERB tag如何在 Rails ERB 标记中调用 javascript 变量
【发布时间】:2013-03-14 08:42:57
【问题描述】:

我通过使用 Sunspot solr 作为 JSON 从我的 Rails 操作中获取职位搜索结果,并且我通过解析 JSON 数据并使用 Javascript 创建 HTML 元素在客户端创建结果视图。但是从响应 JSON 中我们无法获得Job Association 对象,因此通过使用响应 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 变量。

【问题讨论】:

    标签: javascript ruby-on-rails json erb


    【解决方案1】:

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

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

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

    然后在模型中,添加company_name方法

     def company_name
       company.name
     end
    

    【讨论】:

      【解决方案2】:

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

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

      您可以查看 railcasts here 如何做到这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-21
        相关资源
        最近更新 更多