Ruby中的Javascript

Ruby中的Javascript,javascript,ruby,Javascript,Ruby,我在下面有一个ruby each方法,其中嵌入了一个按钮onclick,我试图在点击股票代码时为投资组合中的每只股票调用iex的stats api,并将其存储在我构建的表中。这是红宝石: <% portfolio.assignments.each_with_index do |a, index|%> <div class="accordion" id="accordionExample"> <div> <div id="headi

我在下面有一个ruby each方法,其中嵌入了一个按钮onclick,我试图在点击股票代码时为投资组合中的每只股票调用iex的stats api,并将其存储在我构建的表中。这是红宝石:

<% portfolio.assignments.each_with_index do |a, index|%>
   <div class="accordion" id="accordionExample">
    <div>
     <div id="headingThree">
      <h5 class="mb-0">
       <button onclick="getStock();" class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseThree<%=a.id%>" aria-expanded="false" aria-controls="collapseThree<%=a.id%>">                                    
        <li class="list-inline-item"id="<%=a.stock.ticker%>"><%= a.stock.ticker %></li>
部分代码缺失,但我只包含了我认为相关的部分,但当我运行代码并在浏览器中检查它时,我可以看到数据库中存储的每个ticker的所有内容都正确加载,但它只显示第一个ticker的数据返回

function getStock() {
 $('#<%=a.stock.ticker%>').each(function(){
  var theURL = `https://api.iextrading.com/1.0/stock/<%=a.stock.ticker%>/stats`;
   $.getJSON(theURL, function(data) {
     var obj = data;
      document.getElementById("symbol").innerHTML = obj.symbol;
  });
 })
};
这是我的表格的一部分:

<table class="table table-hover text-left">
    <tbody>
     <tr>
        <th>Symbol:</th>
        <td id="symbol"></td>
您有n个任务,通过每个带有索引的任务,您将得到n个div调用getStock n次

但实际的问题是您的JavaScript函数getStock是单拷贝的,并且不会重复查找循环的每个分配标记器

只需替换以下内容

"getStock();"
有,

并将函数修改为

function getStock(ticker) {
 $(ticker).each(function(){
  var theURL = `https://api.iextrading.com/1.0/stock/' + ticker + '/stats`;
   $.getJSON(theURL, function(data) {
     var obj = data;
      document.getElementById("symbol").innerHTML = obj.symbol;
  });
 })
};

更新-如果上述功能不起作用,您可以尝试使用&Update功能。

每个HTML页面上只能有一个具有给定id的元素。也许用一个类来代替。我想说的是原始评论中的最后一个代码。当我更新getStock函数时,它仍然会这样做。它只返回最后一个ticker,当我添加上面的getStock{a.stock.ticker}时,它不起作用;它向button元素抛出一个语法error@JosephParker我的问题是,我没有测试,但我在更新中添加了一个解决方案,以避免我的答案重复
function getStock(ticker) {
 $(ticker).each(function(){
  var theURL = `https://api.iextrading.com/1.0/stock/' + ticker + '/stats`;
   $.getJSON(theURL, function(data) {
     var obj = data;
      document.getElementById("symbol").innerHTML = obj.symbol;
  });
 })
};