如何在javascript中从控制器中的视图传递变量 - Rails 4

时间:2015-05-19 10:18:15

标签: javascript ruby-on-rails ruby

我想读取用户引入的变量并将其传递给我的控制器。我对ruby和rails非常新。 index.html.erb是这样的:

<h1>Welcome#index</h1> 
<p>Find me in app/views/welcome/index.html.erb</p> 
<h1>Spline Chart</h1> 


<div class="boxed">
      <strong>Jahreshausverbrauch (kWh):</strong>
      <%= form_tag do %>
          <%= text_field_tag "user_entry_module1", nil, placeholder: "Bsp. 3500" %>
          <%= submit_tag "Berechnen" %>
      <%end%>
</div> 


<div id="container"></div> 

<script > 

  $(document).ready(function() { 
    var options = { 
        chart: { 
            renderTo: 'container', 
            type: 'spline' 
        }, 
        series: [{}] 
    }; 


    $.getJSON('/welcome/get_data/?factor=1', function(data) { 
        options.series[0].data = data; 
        var chart = new Highcharts.Chart(options); 
    }); 
  }); 
</script> 

因此,我想要传递user_entry_module1而不是?factor = 1,而这是客户端在表单中引入的。

我的控制器是这样的:

class WelcomeController < ApplicationController

  def index



  end  

  def get_data 
    #From json to hash - consumption_profile_generic 
     file_path = Rails.root.join('db','consumption_profile_generic_some_columns.js')  
     file_gen = File.read(file_path) 
     data_hash_gen = JSON.parse(file_gen) 


  # Filtering date and consumption_% ind 2 vectors and then merging them
  num = data_hash_gen.count 
  vectorA = Array.new
  vectorB = Array.new
  i = 0
  while num > i
    vectorA[i] = data_hash_gen[i]["consumption_%"].to_f  
    vectorB[i] = data_hash_gen[i]["date"]
    i += 1
  end

  data = vectorB.zip(vectorA)

    factor = params[:factor].to_i 
    data = data.map{|i| [i[0], i[1] * factor]} 

  render json: data

  end 

1 个答案:

答案 0 :(得分:0)

如果您只想在js代码中获得文本字段的值,可以这样做:

<%= text_field_tag "user_entry_module1", nil, placeholder: "Bsp. 3500". id: "user_entry" %> # add jquery selecter id

现在在你的js代码中执行:

   $(document).ready(function() { 
     var myVar;
     var options = { 
       chart: { 
         renderTo: 'container', 
         type: 'spline' 
       }, 
       series: [{}] 
     }; 

     $(document).on('change', '#user_entry', function(){
       myVar = $(this).val();
     }

     $.getJSON('/welcome/get_data/?factor=' + 'myVar', function(data) { 
       options.series[0].data = data; 
       var chart = new Highcharts.Chart(options); 
    }); 
   }); 

如果您在使用url加入变量时遇到问题,请将变量转换为字符串,然后使用url加入。

希望我能正确解决您的问题,此代码可以帮助您。